Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets, По моей проблеме ничего нового нет ? Я там в посте у себя поправочку сделал если что прочитай.
Как то скучно в теме перед Новым Годом... Для разнообразия :
Попался код для проигрывания видео в процессе установки, на заднем 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, соответствующие плагины по работе с процессами, завершают процесс только по имени, у кого какие мысли по этому поводу...
Необходимо завершить процесс ориентируясь на его путь, пример "$TEMP\main.exe", как это можно реализовать в NSIS, соответствующие плагины по работе с процессами, завершают процесс только по имени, у кого какие мысли по этому поводу... »
Есть мысль ознакомиться с нашим справочником по NSIS
Примеры кодов => Работа с процессами с помощью NSIS
В конце статьи есть "Перечисление запущенных процессов", таким способом думаю получится ;)
kotkovets, Здравствуйте. Скажите, пожалуйста, получилось осуществить эту идею?
http://forum.oszone.net/nextnewesttothread-218597.html
Ваше сообщение в конце страницы...
habib2302
06-01-2013, 18:12
люди.дайте справку или полное описание всех плагинов лля NSIS на русском языке
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"
Не пашит (((
Painkiller, справку читайте внимательней, пример из справки:
Ярлык с файлом иконки:
CreateShortCut "$DESKTOP\Справочник по NSIS.lnk" "$WINDIR\NSIS_Help.chm" "" "$WINDIR\Explorer.exe" "2"
Т.е. индекс иконки прописывается отдельно от имени файла, в следующих кавычках
Может кому пригодится код, позволяющий создать на кастомной странице активную гиперссылку с "тултипом" :
!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
Среди 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
Таким же образом можно получить данные о программах, открывающих другие типы файлов. Для этого указываем в коде нужное расширение файла.
Может кому пригодится код, позволяющий создать на кастомной странице активную гиперссылку с "тултипом" : »
Среди API функций, есть функция FindExecutable, которая находит имя приложения, связанного с заданным типом файла. »
Можно сразу такие полезняшки оформлять в виде странички из справочника, а мы потом добавим :)
Может кому пригодится код »
Пригодится всё, если код не стандартный и имеет полезный функционал
Правда в первом случае, такие вот функции лучше сразу преподносить кодерам в виде универсальной функции, т.е. чтобы можно было передать в функцию парочку значений и, чтобы функция их приняла и обработала (а не привязываться, к примеру, к одному элементу, чтобы не разбухать исходник добавляя тултипы)
Вы же прекрасно понимаете, что в этой теме такую полезную инфу всё равно увидят не все, т.к. многим просто лень перечитывать тему (а это и понятно, если страниц в теме много), поэтому лучше сразу в справочник их вносить, а здесь так сказать как "быстрый анонс новенькой плюшки" :)
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
Значение задержки можно изменять (как - это очевидно в коде )
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
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 "Вот и он....!"
Но так почему то не работает..мож что то упускаю? :)
Но так почему то не работает..мож что то упускаю? »
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
В нем мне кажется все как то проще... »
Проще - для кастомной страницы. А со стандартными надо поизгиляться. :) Тем вышеприведённые коды и интересны. ИМХО...
А вообще вся "фишка" в функции CreateWindowEx. Но создание tooltips, это так, между прочим... Ведь с её помощью можно создавать разнообразные объекты на страницах, особенно интересно, что на стандартных. Но вариации параметров мне далеко не все понятны.
Хотел бы попросить kotkovets, сделать как нибудь подробный разбор этой полезнейшей функции (наверное и сопутствующих GetWindowRect , MapWindowPoints, SetWindowPos и т.д.) - применимо к использованию в NSIS.
Док по ним ужасно мутный для "рядового" понимания.... И примеры на Cи...
K.A.V., а можно сделать в ToolTips перенос по строкам, чтобы все не в одну строчку было?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.