Войти

Показать полную графическую версию : .: 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

MaGoth
25-12-2012, 15:36
kotkovets, По моей проблеме ничего нового нет ? Я там в посте у себя поправочку сделал если что прочитай.

MKN
27-12-2012, 11:05
Как то скучно в теме перед Новым Годом... Для разнообразия :
Попался код для проигрывания видео в процессе установки, на заднем FullScreen фоне. Видеофайл должен быть WMV формата.
http://www.mediafire.com/?jie4ce7ixjn4ez0
Интересно, каким образом изменить код, чтобы можно было проигрывать AVI и как бы организовать проигрывание в отдельном задаваемом окне на кастомной странице ?

OutFile WMV_Play.exe
Name WMV_Play

BGGradient 100010 100010 notext
XPStyle on

Function .onGUIInit
SetPluginUnload alwaysoff
FindWindow $0 "_Nb"
System::Call "winmm::mciSendStringA(t 'open $\"$EXEDIR\video.wmv$\" alias vvv parent $0 style child', i 0, i 0, i 0)"
System::Alloc 16
Pop $1
System::Call "user32::GetWindowRect(i $0, 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)"
FunctionEnd

Function .onGUIEnd
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

Krinkels
27-12-2012, 15:52
MKN
ИМХО для NSIS это лишняя ненужность. Но чисто для интереса сделать можно :)

З.Ы. Пробовал сделать плагин аналог botva2.dll, но дальше загрузки изображения в память не дошел :)

Krinkels
27-12-2012, 16:37
Плагин для инно для воспроизведения видео, хавает все для чего есть кодеки в системе

Limonica
29-12-2012, 15:16
Необходимо завершить процесс ориентируясь на его путь, пример "$TEMP\main.exe", как это можно реализовать в NSIS, соответствующие плагины по работе с процессами, завершают процесс только по имени, у кого какие мысли по этому поводу...

K.A.V.
29-12-2012, 15:50
Необходимо завершить процесс ориентируясь на его путь, пример "$TEMP\main.exe", как это можно реализовать в NSIS, соответствующие плагины по работе с процессами, завершают процесс только по имени, у кого какие мысли по этому поводу... »
Есть мысль ознакомиться с нашим справочником по NSIS

Примеры кодов => Работа с процессами с помощью NSIS
В конце статьи есть "Перечисление запущенных процессов", таким способом думаю получится ;)

Salmo
30-12-2012, 23:39
kotkovets, Здравствуйте. Скажите, пожалуйста, получилось осуществить эту идею?
http://forum.oszone.net/nextnewesttothread-218597.html
Ваше сообщение в конце страницы...

habib2302
06-01-2013, 18:12
люди.дайте справку или полное описание всех плагинов лля NSIS на русском языке

alert30
07-01-2013, 07:01
habib2302, держите (http://forum.oszone.net/thread-168287.html)

Painkiller
08-01-2013, 01:04
Народ, подскажите! Как из dll взять иконку на создаваемый ярлык ???
Пробовал так
CreateShortCut "$SENDTO\CAB распаковать.lnk" "$SYSDIR\wscript.exe" '"$INSTDIR\AllInOne.vbs" "/OUT"' "$OUTDIR\XTools.dll,9"
и
CreateShortCut "$SENDTO\CAB распаковать.lnk" "$SYSDIR\wscript.exe" '"$INSTDIR\AllInOne.vbs" "/OUT"' "$INSTDIR\XTools.dll,9"
и
CreateShortCut "$SENDTO\CAB распаковать.lnk" "$SYSDIR\wscript.exe" '"$INSTDIR\AllInOne.vbs" "/OUT"' "$INSTDIR\XTools.dll,-9"
Не пашит (((

K.A.V.
08-01-2013, 02:30
Painkiller, справку читайте внимательней, пример из справки:

Ярлык с файлом иконки:

CreateShortCut "$DESKTOP\Справочник по NSIS.lnk" "$WINDIR\NSIS_Help.chm" "" "$WINDIR\Explorer.exe" "2"


Т.е. индекс иконки прописывается отдельно от имени файла, в следующих кавычках

MKN
11-01-2013, 16:45
Может кому пригодится код, позволяющий создать на кастомной странице активную гиперссылку с "тултипом" :
!include "MUI2.nsh"

Page custom nsDialogsPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "link_click_tooltips"
OutFile "link_click_tooltips.exe"
XPStyle on
Var Link
Var tipS

Function OnTimer
${Unless} $tips <> 0
System::Call USER32::CreateWindowEx(i0x00000008,t"tooltips_class32",i,i0x80000000,i,i,i,i,i,i,i0,i)i.s
Pop $tipS
${EndUnless}
System::Alloc 16
Pop $0
System::Call USER32::GetCursorPos(ir0)
System::Call *$0(i.r1,i.r2)
System::Free $0
System::Call USER32::WindowFromPoint(ir1,ir2)i.r1
${If} $1 = $Link
StrCpy $R1 "oszone.net - лучший ресурс !"
FindWindow $3 "#32770" "" $HWNDPARENT
System::Call *(i0x28,i0x010,i$3,i0x409,i,i,i,i,i0,tR1)i.R1
SendMessage $tipS 1028 0 $R1
SendMessage $tipS 1033 0 $R1
SendMessage $tipS 1025 1 0
SendMessage $tipS 1041 1 $R1
System::Free $R1
SetCtlColors $Link 0xFF0000 transparent
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${Else}
SendMessage $tipS 1025 0 0
SetCtlColors $Link 0x0000FF transparent
${EndIf}
System::Call user32::RedrawWindow(i$Link,i0,i0,i0x0105)
FunctionEnd

Function nsDialogsPage
nsDialogs::Create 1018
Pop $0
${NSD_CreateLabel} 130u 50u 100% 15u "oszone.net"
Pop $Link
SetCtlColors $Link 0x0000FF transparent
System::Call user32::SetClassLong(i$Link,i-12,i0)
${NSD_OnClick} $Link OnClick
${NSD_CreateTimer} OnTimer 50
nsDialogs::Show
FunctionEnd

Function OnClick
ExecShell "open" "http://forum.oszone.net/thread-248731.html"
FunctionEnd

Section
SectionEnd

MKN
15-01-2013, 11:46
Среди API функций, есть функция FindExecutable, которая находит имя приложения, связанного с заданным типом файла.
К примеру, эту функцию можно задействовать для определения браузера по умолчанию, что часто необходимо.
Алгоритм нахождения такой : в браузере, как правило, открываются файлы htm и html. Создаём временно такой файл, "натравливаем" на него функцию и ищем приложение, которое открывает этот тип файлов.

Name "opens_by_default"
Caption "opens_by_default"
OutFile "opens_by_default.exe"

Section
StrCpy $R1 htm
FileOpen $0 "$TEMP\opens_by_default.$R1" "w"
FileClose $0
System::Call "Shell32::FindExecutable(t '$TEMP\opens_by_default.$R1', i 0, t .r1)"
Delete "$TEMP\opens_by_default.$R1"
MessageBox MB_OK '$R1 файлы по умолчанию открывает : $1 '
SectionEnd
Таким же образом можно получить данные о программах, открывающих другие типы файлов. Для этого указываем в коде нужное расширение файла.

K.A.V.
16-01-2013, 00:16
Может кому пригодится код, позволяющий создать на кастомной странице активную гиперссылку с "тултипом" : »
Среди API функций, есть функция FindExecutable, которая находит имя приложения, связанного с заданным типом файла. »
Можно сразу такие полезняшки оформлять в виде странички из справочника, а мы потом добавим :)

Может кому пригодится код »
Пригодится всё, если код не стандартный и имеет полезный функционал

Правда в первом случае, такие вот функции лучше сразу преподносить кодерам в виде универсальной функции, т.е. чтобы можно было передать в функцию парочку значений и, чтобы функция их приняла и обработала (а не привязываться, к примеру, к одному элементу, чтобы не разбухать исходник добавляя тултипы)

Вы же прекрасно понимаете, что в этой теме такую полезную инфу всё равно увидят не все, т.к. многим просто лень перечитывать тему (а это и понятно, если страниц в теме много), поэтому лучше сразу в справочник их вносить, а здесь так сказать как "быстрый анонс новенькой плюшки" :)

MKN
16-01-2013, 10:47
K.A.V.,
Для справочника инфу ведь надо как то правильно оформлять...

Вот ещё занятный пример:

Установка на кнопку стандартной страницы, таймера с индикацией обратного отсчёта, т.е. задержка активности кнопки перед продолжением установки.

Например, для кнопки "Install" для PAGE_WELCOME или для кнопки "I Agree" для PAGE_LICENSE.
Где можно применить - например, чтобы пользователь перед установкой прочитал чего нибудь полезное, а не сразу клацал кнопками продолжения установки.
Для этого есть спец. DLL ( местонахождение DLL - рядом со скриптом, ессно при наличии в коде !AddPluginDir ".\" ) :


!AddPluginDir ".\"
Name "Delay the next button"
OutFile "Delay the next button.exe"
Caption "Delay the next button"
!include MUI2.nsh

!define MUI_CUSTOMFUNCTION_ABORT OnUserAbort

;таймер кнопки "Install" для PAGE_WELCOME
;!define MUI_PAGE_CUSTOMFUNCTION_SHOW LicensePage
;!insertmacro MUI_PAGE_WELCOME
; или
;таймер кнопки "I Agree" для PAGE_LICENSE
!define MUI_PAGE_CUSTOMFUNCTION_SHOW LicensePage
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Function LicensePage
GetDlgItem $0 $HWNDPARENT 1
Delay::DelayButton /NOUNLOAD $0 10 ""
Pop $1
FunctionEnd
Function .onGUIEnd
Delay::Free
FunctionEnd
Function OnUserAbort
Delay::Free
FunctionEnd
Section
SectionEnd

Значение задержки можно изменять (как - это очевидно в коде )

MKN
17-01-2013, 17:10
ToolTips (всплывающие подсказки) на стандартной странице выбора компонентов (PAGE_COMPONENTS)

ToolTip будет появляться при наведении указателя мыши на выбранный компонент.


!define MUI_COMPONENTSPAGE_NODESC
!include MUI2.nsh
!include LogicLib.nsh

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

outfile "PAGE_COMPONENTS_ToolTip.exe"

Section Section1 ID_Sec1
SectionEnd
Section Section2 ID_Sec2
SectionEnd
Section Section3 ID_Sec3
SectionEnd
Section Section4 ID_Sec4
SectionEnd

var ttip

!define WS_POPUP 0x80000000
!define TTF_SUBCLASS 0x010
!define /math TTM_ACTIVATE ${WM_USER} + 1
!define /math TTM_ADDTOOL ${WM_USER} + 4
!define /math TTM_SETTOOLINFO ${WM_USER} + 9
!define /math TTM_TRACKACTIVATE ${WM_USER} + 17
!define /math TTM_TRACKPOSITION ${WM_USER} + 18
!define /math TTM_POP ${WM_USER} + 28
!define /math TTM_POPUP ${WM_USER} + 34

Function .onMouseOverSection
${If} $0 = -1
killtip:
SendMessage $ttip ${TTM_ACTIVATE} 0 0
Return
${EndIf}
StrCpy $2 ""
${If} $ttip = 0
System::Call 'USER32::CreateWindowEx(i${WS_EX_TOPMOST},t"tooltips_class32",i,i${WS_POPUP},i,i,i,i,i0,i,i,i)i.r2'
StrCpy $ttip $2
${EndIf}

StrCpy $1 ""
${Select} $0
${Case} ${ID_Sec1}
StrCpy $1 "Это секция 1"
${Case} ${ID_Sec2}
StrCpy $1 "Это секция 2"
${Case} ${ID_Sec3}
StrCpy $1 "Это секция 3"
${Case} ${ID_Sec4}
StrCpy $1 "Это секция 4 **************************************** Это секция 4"
${EndSelect}

FindWindow $3 "#32770" "" $HWNDPARENT
System::Call '*(i40,i${TTF_SUBCLASS},i$3,i0x408,i,i,i,i,i0,tr1)i.r1'
SendMessage $2 ${TTM_ADDTOOL} 0 $1
SendMessage $ttip ${TTM_SETTOOLINFO} 0 $1
SendMessage $ttip ${TTM_ACTIVATE} 1 0
SendMessage $ttip ${TTM_TRACKACTIVATE} 1 $1
System::Free $1
${If} $2 <> 0
System::Call 'USER32::IsWindowVisible(ir3)i.r0'
${IfThen} $0 = 0 ${|} goto killtip ${|}
${EndIf}
FunctionEnd
Section
SectionEnd

diakov
18-01-2013, 00:55
MKN, может разтолкуеш роботу этого плага http://nsis.sourceforge.net/ToolTips_plug-in
В нем мне кажется все как то проще...вот пытаюсь его привязать к радиобутону в Page custom
в PageInit ставлю код:

FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $5 $0 1201 # id радибутона 1201 instance соответственно 5
ToolTips::Classic $5 "Вот и он....!"

Но так почему то не работает..мож что то упускаю? :)

K.A.V.
18-01-2013, 01:25
Но так почему то не работает..мож что то упускаю? »
C помощью чего создаёте страничку? nsDialogs? Вы хотя бы кусок своего кода приводите...

Вот пример с nsDialogs с чекбоксом


!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "LogicLib.nsh"
!include "WinMessages.nsh"
!include "nsDialogs.nsh"

Page custom func
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "TEST.exe"
Caption "TEST.exe"
OutFile "TEST.exe"
ShowInstDetails show
XPStyle on

Var dlg
Var RadioButton1
Var RadioButton2
Var CheckBox
Var Label
Var MyVar

Function func
nsDialogs::Create 1018
pop $0

GetDlgItem $0 $HWNDPARENT 1037
SendMessage $0 ${WM_SETTEXT} 0 "STR:Мой текст строки №1"

GetDlgItem $0 $HWNDPARENT 1038
SendMessage $0 ${WM_SETTEXT} 0 "STR:Мой текст строки №2"


${NSD_CreateCheckbox} 25u 27u 68u 14u "checkbox"
pop $checkbox

ToolTips::Classic $checkbox "Вот и он....!"


${NSD_CreateLabel} 0 5u 100u 10u ""
pop $Label


nsDialogs::Show
FunctionEnd




Section
;SetAutoClose true
SectionEnd

MKN
18-01-2013, 08:53
В нем мне кажется все как то проще... »
Проще - для кастомной страницы. А со стандартными надо поизгиляться. :) Тем вышеприведённые коды и интересны. ИМХО...
А вообще вся "фишка" в функции CreateWindowEx. Но создание tooltips, это так, между прочим... Ведь с её помощью можно создавать разнообразные объекты на страницах, особенно интересно, что на стандартных. Но вариации параметров мне далеко не все понятны.

Хотел бы попросить kotkovets, сделать как нибудь подробный разбор этой полезнейшей функции (наверное и сопутствующих GetWindowRect , MapWindowPoints, SetWindowPos и т.д.) - применимо к использованию в NSIS.
Док по ним ужасно мутный для "рядового" понимания.... И примеры на Cи...

diakov
18-01-2013, 19:31
K.A.V., а можно сделать в ToolTips перенос по строкам, чтобы все не в одну строчку было?




© OSzone.net 2001-2012