PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 [101] 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Sancho5555
10-03-2016, 12:52
Serg866, вот так удаляет:

RMDir /r "$DESKTOP\Моя папка"

Sancho5555
10-03-2016, 15:14
В справочнике, в разделе "Работа с реестром" есть макрос ${StrToHex} "строка" $var - Конвертирование строки в HEX.
Не подскажите, как сделать наоборот конвертирование HEX в строку, или ${HexToStr}?

MKN
10-03-2016, 15:56
HEX в строку »
Registry_plug-in
${registry::HexToStr} "[hex_string]" $var

И ещё когда то kotkovets, приводил такой код :

конвертация 16-ричное число в десятичное, десятичное в ASCII

IntFmt $1 "%i" 0x37 ;16-ричное число в десятичное
;-------------------------------------------------------------------
IntFmt $1 "%c" $1 ;десятичное в ASCII

Dodakaedr
11-03-2016, 19:15
Подскажите, пожалуйста, в чем проблема? Почему если в конце ключа реестра стоит цифра то этот ключ пропускается? Для большей понятности:outfile "test find key.exe"
!include "Registry.nsh"

function "_bak"
StrCpy $0 0
loop:
EnumRegKey $1 HKLM "SOFTWARE" $0
StrCmp $1 "" done
IntOp $0 $0 + 1
StrCpy $9 "$1" 14
StrCmp $9 "ComSysControl." wel loop
wel:
${registry::MoveKey} "HKLM\SOFTWARE\$1" "HKLM\SOFTWARE\$1_bak" $r9
${Registry::UnLoad}
goto loop
done:
functionend

Section
${registry::Write} "HKLM\SOFTWARE\ComSysControl.UserVars.1" "" "" "REG_SZ" $9
${registry::Write} "HKLM\SOFTWARE\ComSysControl.UserVars" "" "" "REG_SZ" $9
${registry::Write} "HKLM\SOFTWARE\ComSysControl.Win_ini.1" "" "" "REG_SZ" $9
${registry::Write} "HKLM\SOFTWARE\ComSysControl.Win_ini" "" "" "REG_SZ" $9
${registry::Unload}
call _bak
SectionEnd

MKN
12-03-2016, 10:01
Почему если в конце ключа реестра стоит цифра то этот ключ пропускается? »

Всё нормально :


OutFile "test find key.exe"
!include "Logiclib.nsh"
!include "Registry.nsh"

var err

Section
; для тестирования
${registry::Write} "HKLM\SOFTWARE\Test.test.ttt.aaaaaaaa.1" ".test" "5" "REG_SZ" $err
${registry::Write} "HKLM\SOFTWARE\Test.test.ttt.bbbbbbbb.1" ".test" "7" "REG_SZ" $err

${Do}
EnumRegKey $1 HKLM "SOFTWARE" $0
IntOp $0 $0 + 1
StrCpy $9 $1 14 ;первые 14 символов из $1(Test.test.ttt.) помещаем в $9
${If} $9 == "Test.test.ttt." ; условие
DetailPrint $1 ;для информации
ClearErrors
MessageBox MB_OK "Условие найдено. Далее - необходимое действие"
${EndIf}
${LoopUntil} $1 == ""
SectionEnd

Dodakaedr
12-03-2016, 18:14
Всё нормально : »
С тестовыми ключами да, но если подставить требуемые, то результат тот же:


http://i74.fastpic.ru/big/2016/0312/29/42cbae897b9f813267cf479615f97529.jpg


OutFile "test find key22.exe"
!include "Logiclib.nsh"
!include "Registry.nsh"

var err

Section
; для тестирования
${registry::Write} "HKLM\SOFTWARE\ComSysControl.UserVars.1" ".test" "5" "REG_SZ" $err
${registry::Write} "HKLM\SOFTWARE\ComSysControl.UserVars" ".test" "7" "REG_SZ" $err

${Do}
EnumRegKey $1 HKLM "SOFTWARE" $0
IntOp $0 $0 + 1
StrCpy $9 $1 14 ;первые 14 символов из $1(Test.test.ttt.) помещаем в $9
${If} $9 == "ComSysControl." ; условие
;DetailPrint $1 ;для информации
;ClearErrors
;MessageBox MB_OK "Условие найдено. Далее - необходимое действие"
${registry::MoveKey} "HKLM\SOFTWARE\$1" "HKLM\SOFTWARE\$1_bak" $r9
${Registry::UnLoad}
${EndIf}
${LoopUntil} $1 == ""
SectionEnd

MKN
13-03-2016, 20:08
С тестовыми ключами да, но если подставить требуемые, то результат тот же »
Значит дело конкретно в твоих ключах. Либо нет доступа к ключу, либо скрипту(плагину) не нравится название ключа.
В частности, подозрение вызывает "UserVars" в составе ключа.

Sancho5555
16-03-2016, 15:14
Есть плагин от K.A.V. для установки прозрачности окна инсталлятора - для примера код:
!include "MUI2.nsh"
!define TBM_SETPOS 0x0405
!define TBM_GETPOS 0x0400
!define TBM_SETRANGEMIN 0x0407
!define TBM_SETRANGEMAX 0x0408

!addplugindir "."
!insertmacro MUI_LANGUAGE "Russian"

Name "transparent plugin example"
OutFile "transparent.exe"
XPStyle on

Var transparent
Var Slider
Var Move
Var Label
Var Button

Page custom Create

Function Slider
SendMessage $Slider ${TBM_GETPOS} 0 0 $Move
transparent::SetTransparentWindowStyle "$Move"
${NSD_SetText} $Label "$Move"
FunctionEnd

Function Create
nsDialogs::Create 1018
Pop $transparent

nsDialogs::CreateControl "msctls_trackbar32" "0x50010000|0x00000018" "" 80u 100u 200 60 ""
Pop $Slider
SendMessage $Slider ${TBM_SETRANGEMIN} 1 50
SendMessage $Slider ${TBM_SETRANGEMAX} 1 255
SendMessage $Slider ${TBM_SETPOS} 1 255
transparent::SetTransparentWindowStyle "255"

${NSD_CreateLabel} 215u 104u 30u 30u ""
Pop $Label

${NSD_CreateButton} 20u 103u 51u 12u "Обзор"
Pop $Button
${NSD_OnClick} $Button Example

${NSD_CreateTimer} Slider 50
nsDialogs::Show $transparent
FunctionEnd

Function Example
nsDialogs::SelectFolderDialog /NOUNLOAD "" ""
Pop $0
FunctionEnd

Section
SectionEnd
Прозрачность работает, но после нажатия кнопки "Обзор" transparent плагин перестаёт работать.
В чём может быть проблема?

K.A.V.
17-03-2016, 16:18
Прозрачность работает, но после нажатия кнопки "Обзор" transparent плагин перестаёт работать. »
Нет такой проблемы, по крайней мере у меня, всё работает
Попробуйте так (http://kav-soft.ru/onlineHelp/NSIS/index.html?page=source%2Fcode_example%2FTransparentWindow.html)

Sancho5555
18-03-2016, 11:29
Нет такой проблемы, по крайней мере у меня, всё работает »
Заметил у себя на Win8 X64 работает через раз, после загрузки системы, буду разбираться.

MKN
19-03-2016, 13:19
Подскажите, как поместить видео в собственное окно на кастомной странице ?

код, в котором это не получается... (видео окно рядом с кастомным) :


!include MUI2.nsh
Page custom MyPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
OutFile "test_video.exe"
!define WS_BORDER 0x00800000
Var dlg

Function MyPage
nsDialogs::Create 1018
Pop $dlg

System::Call 'user32::CreateWindowEx(i0,t "STATIC",t " здесь должно быть видео",\
i${DEFAULT_STYLES}|${WS_BORDER}|${WS_VISIBLE},\
i130,i50,i200,i150,i$dlg,i222,i0,i0) i.R7'
SetCtlColors $R7 `0x0000FF` `0x99FFFF`

System::Call "winmm::mciSendStringA(t 'open $\"$EXEDIR\video.wmv$\" alias vvv parent $R7', i 0, i 0, i 0)"
System::Alloc 16
Pop $1
System::Call "user32::GetWindowRect(i $R7, i $1)"
System::Call "*$1(i.r2, i.r3, i.r4, i.r5)"
System::Free $1
System::Call "winmm::mciSendStringA(t 'put vvv destination at $2 $3 $4 $5', i 0, i 0, i 0)"
System::Call "winmm::mciSendStringA(t 'window vvv stretch', i 0, i 0, i 0)"
System::Call "winmm::mciSendStringA(t 'play vvv repeat',i 0, i 0, i 0)"
nsDialogs::Show
System::Call "winm::mciSendStringA(t 'stop vvv',i 0, i 0, i 0)"
System::Call "winm::mciSendStringA(t 'close vvv',i 0, i 0, i 0)"
FunctionEnd

тестовый комплект : http://rghost.ru/private/8RjjlkHVT/7c47e83bc5328fedc4a877c9ac07d1af

K.A.V.
19-03-2016, 14:25
Подскажите, как поместить видео в собственное окно на кастомной странице ? »

!include MUI2.nsh
Page custom MyPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
OutFile "test_video.exe"
!define WS_BORDER 0x00800000
Var dlg

Function MyPage
nsDialogs::Create 1018
Pop $dlg

System::Call 'user32::CreateWindowEx(i0,t "STATIC",t " здесь должно быть видео",\
i${DEFAULT_STYLES}|${WS_BORDER}|${WS_VISIBLE},\
i130,i50,i200,i150,i$dlg,i222,i0,i0) i.R7'
SetCtlColors $R7 `0x0000FF` `0x99FFFF`

System::Call "winmm::mciSendStringA(t 'open $\"$EXEDIR\video.wmv$\" alias vvv parent $R7 style child', i 0, i 0, i 0)"
System::Alloc 16
Pop $1
System::Call "user32::GetWindowRect(i $R7, i $1)"
System::Call "*$1(i.r2, i.r3, i.r4, i.r5)"
System::Free $1
System::Call "winmm::mciSendStringA(t 'put vvv destination $2 $3 $4 $5', i 0, i 0, i 0)"
System::Call "winmm::mciSendStringA(t 'window vvv stretch', i 0, i 0, i 0)"
System::Call "winmm::mciSendStringA(t 'play vvv repeat',i 0, i 0, i 0)"
nsDialogs::Show
System::Call "winm::mciSendStringA(t 'stop vvv',i 0, i 0, i 0)"
System::Call "winm::mciSendStringA(t 'close vvv',i 0, i 0, i 0)"
FunctionEnd

Section
SectionEnd

MKN
19-03-2016, 14:45
K.A.V.,
Я ведь специально убрал style child из кода, т.к. с ним видео не было и в помине. А без него было, рядом в отдельном окне.
И сейчас скомпилил , запустил - нет никакого видео ! Но, совершенно случайно подвинул окно в сторону - и видео появилось.
Т.е. , пока не подвигаешь окно - видео нет. Что за чертовщина ?

K.A.V.
19-03-2016, 14:56
И сейчас скомпилил , запустил - нет никакого видео ! Но, совершенно случайно подвинул окно в сторону - и видео появилось.
Т.е. , пока не подвигаешь окно - видео нет. Что за чертовщина ? »
Не знаю, что у тебя вечно за глюки с NSIS и системой, у меня после запуска сразу видео отображается...

MKN
21-03-2016, 08:39
глюки с NSIS и системой »
На другой машине то же самое. Видео нет, пока чуть не сдвинешь окно... И RedrawWindow не помогает...
Приблизительно такой же эффект разбирался здесь :
http://rsdn.ru/forum/media/340319.hot
Было ли решение, не ясно...

Serg866
26-03-2016, 11:08
Всё не оставляю попыток изменить файл hosts без ругани самой системы и антивирусов.
Как думаете, можно воспользоваться методом, описанным здесь?
http://www.cyberforum.ru/cmd-bat/thread859941.html

MKN
29-03-2016, 12:09
Расшифровываем URI ( Uniform Resource Identifier )
http://ru.wikipedia.org/wiki/URI
здесь об URI человеческим языком : http://handynotes.ru/2009/09/uri-url-urn.html

Если ещё проще, то часто встречающиеся ссылки вида :
http://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0"
- это и есть URI.

Для декодирования/кодирования URI, у китайских товарищей есть плагин.

!addplugindir .
OutFile nsURI.exe
InstallColors /windows
ShowInstDetails show
Section
nsURI::decodeURI "http://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0"
Pop $R0
DetailPrint $R0
SectionEnd

Также, при необходимости , используем:
nsURI::encodeURI
nsURI::encodeURIComponent
nsURI::decodeURIComponen

trobbobsom
29-03-2016, 19:19
Добрый вечер!

Подскажите пожалуйста,я уже перерыл половину интернета...

не меняется иконка инсталера http://s8.hostingkartinok.com/uploads/images/2016/03/13de969d4cae8ff0cceda37e7acbbbee.png (http://hostingkartinok.com/show-image.php?id=13de969d4cae8ff0cceda37e7acbbbee)

Вот код который использую :


!include "MUI.nsh"

!define MUI_ICON "2.ico"


я уже не знаю что попробовать,перепробовал все..

Версия ос : win10
Версия nsis : 2.5

Dodakaedr
29-03-2016, 19:50
trobbobsom, добавьте этоIcon "icon.ico" иконка в данном случаи должна находится возле скрипта

trobbobsom
30-03-2016, 11:01
trobbobsom, добавьте это
Код:
Icon "icon.ico"
иконка в данном случаи должна находится возле скрипта »

Спасибо огромнейшее!!! Работает! Вы мне очень помогли!




© OSzone.net 2001-2012