|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Kopejkin:
Цитата Kopejkin:
Поэтому с такими "дефектами" приходится мириться или применять стили, где они не так явно проявляются. Возможно все же есть какое-то другое решение, но я его не знаю. Цитата Kopejkin:
|
|||
Отправлено: 16:30, 26-02-2014 | #1051 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
Цитата Flix:
*В примере идёт удаление стиля у надписи "Nullsoft Scriptable Install System" !include "mui.nsh" !include "nsDialogs.nsh" !define NSD_RemoveStyle "!insertmacro _NSD_RemoveStyle_Call" !macro _NSD_RemoveStyle_Call CONTROL EXSTYLE Push `${CONTROL}` Push `${EXSTYLE}` System::Store SR1R0 IntOp $R1 $R1 ~ System::Call `user32::GetWindowLong(iR0,i${GWL_STYLE})i.R2` IntOp $R2 $R1 & $R2 System::Call `user32::SetWindowLong(iR0,i${GWL_STYLE},iR2)` System::Store L !macroend !insertmacro MUI_PAGE_WELCOME !define MUI_PAGE_CUSTOMFUNCTION_PRE RemoveDISABLEDStyle !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_INSTFILES |
||
------- Отправлено: 17:01, 26-02-2014 | #1052 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Flix:
Function onGUIInit InitPluginsDir SetOutPath $PLUGINSDIR File "${NSISDIR}\Plugins\x86-unicode\SkinH.dll" File "${NSISDIR}\Contrib\Skins\0011.she" ; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0011.she') #################### Patches for SkinSharp #################### System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.r0 IntOp $0 $0 + 0x0002CA98 System::Call Kernel32::GetCurrentProcess()i.s System::Call Kernel32::VirtualProtectEx(is,ir0,i4,i0x40,*i) System::Call "*$0(&i1 0)" ############################################################### FunctionEnd Цитата K.A.V.:
|
||
Последний раз редактировалось Flix, 26-02-2014 в 18:39. Отправлено: 18:34, 26-02-2014 | #1053 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать K.A.V., Приятно послушать разговор знающих людей. Особенно когда тема беседы понятна.
Т.к. это не про меня, буду вставлять умные слова в свои Какой дескриптор у текста "Position your mouse over a component to see its description" и ... В общем, как у этого текста удалить стиль? Домашняя работа. При использовании скинов SkinSharp ваш способ не окрашивает текст в красный (серый), а дает возможность отображаться тексту "Nullsoft Install System"цветом других текстов скина. В окнах обычного инсталлятора (без скинов) текст окрашивается. Для правильной работы команду "!define MUI_PAGE_CUSTOMFUNCTION_PRE RemoveDISABLEDStyle" понадобилось установить перед страницей приветствия. Нашел я, все-таки, где цвет фона окна меняется в VCL Styles for NSIS. Странно, что долго искал |
Последний раз редактировалось Kopejkin, 01-03-2014 в 12:44. Отправлено: 23:34, 26-02-2014 | #1054 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
Ищем диалог, в котором располагается искомый элемент, в нашем случае это диалог 104 - выбор компонентов Ищем нужный нам элемент и смотрим его ID - 1043 Теперь, чтобы выполнить взаимодействие с данным элементом при работе графического интерфейса инсталлятора (убрать/присвоить стиль, поменять текст/цвет и т.д.) - нам нужно узнать его дескриптор, дескриптор своего рода уникальный идентификатор каждого элемента в графическом интерфейсе любой программы, надеюсь, понятно объяснил, если что - гугл Чтобы узнать этот самый дескриптор, нам нужно знать ID элемента, который прописан в UI файле (мы уже узнали, это 1043) Но т.к. наш элемент находится в дочернем окне графического интерфейса ("внутри основного", посмотрите диалоги в ресурсах и всё поймёте), нам нужно сделать немножко другие манипуляции. Теперь в коде выполняем команду: $0 - переменная, куда будет поммещен дескриптор элемента с ID 1043 $HWNDPARENT - дескриптор окна инсталлятора 1043 - соответственно, ID элемента, дескрпитор которого нам нужно узнать Это пример получения дескриптора элемента по идентификатору в ресурсах диалога Чтобы удалить стиль конкретно обсуждаемый "WS_DISABLED", нужно выполнить команду: где $0 - дескриптор элемента, у которого удаляем стиль 0x08000000L - даёт понять команде, какой стиль удалять, в нашем случае это "WS_DISABLED" Цитата Kopejkin:
Теперь о проблеме...Посидел, посмотрел, выводы такие: Если вы хотите изменить цвет текста описания компонентов, то вы должны указать и цвет фона для этого текста, иначе получите глюки при отображении описаний (возможно, решаемо, но не хочу копаться ) Если цвет текста изменять не надо - будет дефолтный цвет (черный по-умолчанию, ну, в зависимости от настроек темы оформления и т.д.) Т.к. речь идёт о кастомизации интерфейса, то делаю вывод, что цвет текста всё-таки менять нужно, иначе получится не очень привлекательно реализовать можно так: 1. Если нужно просто убрать стиль на элемент описания, то воспользуйтесь примером из пункта 3, удалив те участки кода в моих примерах, которые выделены жирным шрифтом Сдеюущие примеры для того, чтобы убрать стиль и назначить цвет текста и фона элементу описания секций 2. Не красиво, нужно редактировать главный файл настроек интерфейса MUI, но удобно назначать описания секциям, не внося никаких изменений в главный файл скрипта вашего инсталлятора Можно, например, просто скопировать указанный ниже файл и в ту же папку и изменить его имя, и за место прописать Открываем файл: \NSIS\Contrib\Modern UI\System.nsh Ищем Закомменитруем строку EnableWindow $MUI_TEMP1 0, которая делает элемент с текстом описания неактивным Ищем: Меняем на: 3. Второй способ. Изменения вносятся только в ваш скрипт инсталлятора. Из плюсов - не нужно редактировать главный файл настроек MUI интерфейса. Минусы - нужно будет писать собственную функцию обработки показа описаний и нужно назначать описания секциям по порядковым номерам начиная с 0, т.е. в том порядке, в каком они прописаны в вашем скрипте. Для начала Функция Пример двух секций с присвоением им описаний + функция для обработки показа описаний При использовании второго метода не забудьте удалить старые строки описаний компонентов, типа таких: вроде ничего не забыл |
||
------- Последний раз редактировалось K.A.V., 27-02-2014 в 01:42. Отправлено: 01:17, 27-02-2014 | #1055 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать Цитата K.A.V:
Со способом номер 1 еще не разбирался. |
|
Последний раз редактировалось Kopejkin, 01-03-2014 в 12:43. Отправлено: 13:56, 27-02-2014 | #1056 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Если необходимо просто избавиться от дефекта, появляющегося на элементах с текстом фирмы и описания компонентов при использовании некоторых стилей SkinSharp, то вариант, предложенный K.A.V. можно намного упростить. Как мы уже выяснили ранее, данный дефект проявляется на элементах, у которых имеется свойство WS_DISABLED, т.е. говоря простым язык - элемент отключен.
Чтобы избавиться от дефекта, данные элементы необходимо включить, и тогда текст примет свойства заданные самой темой. Включаем элемент с текстом фирмы (брандинг). В функции onGUIInit, перед командой применением стиля, указываем следующие команды: ; Получаем дескриптор элемента управления с надписью бренда GetDlgItem $0 $HWNDPARENT 1028 ; Включаем элемент управления (1- включить, 0- отключить) EnableWindow $0 1 ; Функция включения элемента с описанием компонентов !define MUI_PAGE_CUSTOMFUNCTION_SHOW ENABLEDStyle ; Функция включения элемента с описанием компонентов при наведении курсора мышки !define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION ENABLEDStyleOnSel !insertmacro MUI_PAGE_COMPONENTS # Функция включения стиля для элемента с описанием компонентов Function ENABLEDStyle ; Выполняем поиск окна FindWindow $0 "#32770" "" $HWNDPARENT ; Получаем дескриптор элемента управления с описанием компонентов GetDlgItem $1 $0 1043 ; Включаем элемент управления EnableWindow $1 1 FunctionEnd # Функция включения стиля для элемента с описанием компонентов # при наведении курсора мышки на компоненты установки Function ENABLEDStyleOnSel ; Выполняем поиск окна FindWindow $0 "#32770" "" $HWNDPARENT ; Получаем дескриптор элемента управления с описанием компонентов GetDlgItem $1 $0 1043 ; Включаем элемент управления EnableWindow $1 1 FunctionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции" !insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции" !insertmacro MUI_FUNCTION_DESCRIPTION_END Полный код сценария (используется NSIS v3.0a2): # Поддержка Unicode Unicode true !include MUI.nsh !include nsDialogs.nsh !define PRODUCT_NAME "My application" SetCompressor lzma BrandingText "Nullsoft Scriptable Install System" !define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "License.txt" ; Функция включения элемента с описанием компонентов !define MUI_PAGE_CUSTOMFUNCTION_SHOW ENABLEDStyle ; Функция включения элемента с описанием компонентов при наведении курсора мышки !define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION ENABLEDStyleOnSel !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_LANGUAGE "Russian" Name "SkinH" OutFile "setup_SkinH.exe" InstallDir "$PROGRAMFILES\My application" Section "Секция 1" SEC1 SectionEnd Section "Секция 2" SEC2 SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции" !insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции" !insertmacro MUI_FUNCTION_DESCRIPTION_END Function onGUIInit InitPluginsDir SetOutPath $PLUGINSDIR File "${NSISDIR}\Plugins\x86-unicode\SkinH.dll" File "${NSISDIR}\Contrib\Skins\0011.she" ; Получаем дескриптор элемента управления с надписью бренда GetDlgItem $0 $HWNDPARENT 1028 ; Включаем элемент управления (1- включить, 0- отключить) EnableWindow $0 1 ; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0011.she') #################### Patches for SkinSharp #################### System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.r0 IntOp $0 $0 + 0x0002CA98 System::Call Kernel32::GetCurrentProcess()i.s System::Call Kernel32::VirtualProtectEx(is,ir0,i4,i0x40,*i) System::Call "*$0(&i1 0)" ############################################################### FunctionEnd # Функция включения стиля для элемента с описанием компонентов Function ENABLEDStyle ; Выполняем поиск окна FindWindow $0 "#32770" "" $HWNDPARENT ; Получаем дескриптор элемента управления с описанием компонентов GetDlgItem $1 $0 1043 ; Включаем элемент управления EnableWindow $1 1 FunctionEnd # Функция включения стиля для элемента с описанием компонентов # при наведении курсора мышки на компоненты установки Function ENABLEDStyleOnSel ; Выполняем поиск окна инсталлятора FindWindow $0 "#32770" "" $HWNDPARENT ; Получаем дескриптор элемента управления с описанием компонентов GetDlgItem $1 $0 1043 ; Включаем элемент управления EnableWindow $1 1 FunctionEnd Function .onGUIEnd ; Удаление временной папки System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.s System::Call Kernel32::FreeLibrary(is) System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\") FunctionEnd |
Отправлено: 14:27, 27-02-2014 | #1057 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать Flix, подскажите, пожалуйста, правильный синтаксис написания параметров для функции SkinH_AttachExt. Я так понимаю, что тогда не нужно будет прописывать отдельную функцию настройки оттенка, насыщенности и яркости SkinH_AdjustHSV. Желательно, пример в вашем же скрипте.
|
Отправлено: 14:53, 27-02-2014 | #1058 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
Нужно Неправильно !define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description ; Команда отключения стиля текста !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" !define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description ; Команда отключения стиля текста !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES Цитата Kopejkin:
|
||
------- Отправлено: 15:18, 27-02-2014 | #1059 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Kopejkin:
; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0011.she') ; При помощи функции SkinH_AttachExt загружаем файл стиля с именем 0012.she ; и указываем для него желаемые параметры (можно подобрать с помощью SkinViewer): ; - Оттенок = 155 ; - Насыщенность = -32 ; - Яркость = -12 ; Примечание: т.к. пароль для выбранного стиля не задан, то в параметрах ; функции оставляем пустое значение (,,), т.е. для этого ; параметра (strPassword) функция получит значение null. System::Call SkinH::SkinH_AttachExt(t'$PLUGINSDIR\0012.she',,i155,i-32,i-12) |
|
Отправлено: 16:32, 27-02-2014 | #1060 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|