|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 02:30, 08-01-2013 | #71 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Может кому пригодится код, позволяющий создать на кастомной странице активную гиперссылку с "тултипом" :
!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 |
Отправлено: 16:45, 11-01-2013 | #72 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Среди 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 |
Последний раз редактировалось MKN, 15-01-2013 в 12:31. Отправлено: 11:46, 15-01-2013 | #73 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MKN:
Цитата MKN:
![]() Цитата MKN:
Правда в первом случае, такие вот функции лучше сразу преподносить кодерам в виде универсальной функции, т.е. чтобы можно было передать в функцию парочку значений и, чтобы функция их приняла и обработала (а не привязываться, к примеру, к одному элементу, чтобы не разбухать исходник добавляя тултипы) Вы же прекрасно понимаете, что в этой теме такую полезную инфу всё равно увидят не все, т.к. многим просто лень перечитывать тему (а это и понятно, если страниц в теме много), поэтому лучше сразу в справочник их вносить, а здесь так сказать как "быстрый анонс новенькой плюшки" ![]() |
|||
------- Отправлено: 00:16, 16-01-2013 | #74 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать 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, 27-05-2020 в 16:17. Отправлено: 10:47, 16-01-2013 | #75 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать 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 |
Отправлено: 17:10, 17-01-2013 | #76 |
Старожил Сообщения: 176
|
Профиль | Отправить PM | Цитировать 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 "Вот и он....!" ![]() |
Отправлено: 00:55, 18-01-2013 | #77 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата diakov:
Вот пример с 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 |
|
------- Отправлено: 01:25, 18-01-2013 | #78 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата diakov:
![]() А вообще вся "фишка" в функции CreateWindowEx. Но создание tooltips, это так, между прочим... Ведь с её помощью можно создавать разнообразные объекты на страницах, особенно интересно, что на стандартных. Но вариации параметров мне далеко не все понятны. Хотел бы попросить kotkovets, сделать как нибудь подробный разбор этой полезнейшей функции (наверное и сопутствующих GetWindowRect , MapWindowPoints, SetWindowPos и т.д.) - применимо к использованию в NSIS. Док по ним ужасно мутный для "рядового" понимания.... И примеры на Cи... |
|
Последний раз редактировалось MKN, 18-01-2013 в 09:20. Отправлено: 08:53, 18-01-2013 | #79 |
Старожил Сообщения: 176
|
Профиль | Отправить PM | Цитировать K.A.V., а можно сделать в ToolTips перенос по строкам, чтобы все не в одну строчку было?
|
Отправлено: 19:31, 18-01-2013 | #80 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|