Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets
19-12-2013, 21:31
K.A.V., да не отвечай на вопросы, ибо на его писательство не стоит попросту обращать внимания
убрать оффтоп - дело техники модератора
Kopejkin
20-12-2013, 15:41
Попробовал применить скины к инсталлятору с помощью ISSkinEx (MKN (http://forum.oszone.net/post-2219433-536.html))
На некоторых скинах BrandingText выгладит неопрятно.
http://savepic.su/3961769.png
Например: скин tiger
Можно ли что-нибудь сделать?
В Справочнике NSIS есть пример изменения цвета BrandingText.
В стандартном примере скрипта (WelcomeFinish.nsi) - прекрасно работает.
В различных примерах со скинами (см. ссылку MKN выше) - нет.
И что самое обидное ( :lamer: ) в моем, вполне рабочем скрипте без скинов, самодельных окон - в общем, довольно простеньком - тоже не работает. Хотя особой надобности что-либо делать с BrandingText нет - отображается вполне прилично.
Есть ли ограничения применения этого примера? Или что необходимо учитывать?
Попробовал применить скины к инсталлятору с помощью ISSkinEx
На некоторых скинах BrandingText выгладит неопрятно. »
Возможно дело в самом ISSkinEx. Также можно поэксперементировать с назначением шрифта для BrandingText и с темами.
Самый удачный "кожезаменитель" для NSIS, по моему - это SkinH.dll.
Для однокнопочных конструкций можно сделать забавный фейс инсталлятора - в виде круга. Функция , проделывающая это, уже описывалась ранее.
!include nsDialogs.nsh
!include WinMessages.nsh
Caption " "
Page Custom mypagecreate
Page InstFiles
OutFile "CreateRoundRectRgn.exe"
Var dlg
var button
Function .onGUIInit
System::Call "user32::SystemParametersInfo(i0x0025,i0,*i.R0,i0)"
System::Call "user32::SystemParametersInfo(i0x0025,i1,i0,i0)"
FunctionEnd
Function .onGUIEnd
System::Call "user32::SystemParametersInfo(i0x0025,iR0,i0,i0)"
FunctionEnd
Function mypagecreate
nsDialogs::Create 1018
Pop $dlg
System::Call "*(i, i, i, i)i.r0"; создать новую структуру
System::Call "User32::GetClientRect(i$HWNDPARENT, ir0)"; Получить новые координаты структуры - в $0
System::Call "*$0(i, i, i.r1, i.r2)"
IntOp $1 $1 + 5
IntOp $2 $2 + 30
System::Call "Gdi32::CreateRoundRectRgn(i0,i0,i200,i200,i200,i200)i.r0"
; Функция SetWindowRgn устанавливает регион окна. Регион окна устанавливает область внутри окна, где система разрешает рисовать.
;Система не выводит на экран любую часть окна, которая находится за пределами региона окна.
; Координаты окна региона окна находятся относительно левого верхнего угла не рабочей области окна.
;После успешного вызова функции SetWindowRgn системе принадлежит регион, определенный дескриптором hRgn региона.
;Система не делает копию региона. Таким образом, Вы не должны делать дополнительные вызовы функции с этим дескриптором региона.
;В частности не удаляйте этот дескриптор региона. Система удаляет дескриптор региона тогда, когда он больше не нужен.
System::Call "User32::SetWindowRgn(i$HWNDPARENT, ir0, i1)"
${NSD_CreateButton} 50u 35u 17u 16u "X"
Pop $button
${NSD_OnClick} $button done
nsDialogs::Show
FunctionEnd
Function done
SendMessage $hwndparent ${WM_CLOSE} 0 0
FunctionEnd
Section
SectionEnd
SystemParametersInfo с соответствующим флагом, необходима, чтобы убрать пунктирную рамку границы окна , появляющуюся при перетаскивании окна инсталлятора.
Но у меня не получилось - полностью закрасить круг. ( с прямоугольным окном получается).
Как это можно сделать, у кого какие соображения ?
Но у меня не получилось - полностью закрасить круг. ( с прямоугольным окном получается).
Как это можно сделать, у кого какие соображения ? »
Function mypagecreate
nsDialogs::Create 1018
Pop $dlg
SetCtlColors $HWNDPARENT "" 0x80FF00
SetCtlColors $dlg "" 0x80FF00
kotkovets
21-12-2013, 00:20
Но у меня не получилось - полностью закрасить круг »
не получится просто так - это заголовок окна (стиль окна системы), можно перерисовать заголовок, но стандартно не получится,
а можно убрать у окна заголовок, удалить стиль заголовка, но переместить окошко тогда не удасться
а можно убрать у окна заголовок, удалить стиль заголовка, но переместить окошко тогда не удасться »
Да, мешает загловок... Убрать его , как уже выясняли, не проблема. Теперь надо организовать возможность перемещения окна НЕ за заголовок.
Самое простое - запускать вместе со скриптом утилитку для этого (типа MoveInactiveWin). Но так не интересно...
В то же время пишут, что можно сделать так : http://computista.ru/030600.shtml
или использовать сообщение WM_NCHITTEST, которое есть даже в WinMessages.nsh.
Только как это сделать на практике ?
kotkovets
21-12-2013, 19:12
Только как это сделать на практике ? »
стандартно невозможно, только плагином
только плагином »
Которого не существует... Inno в этом плане как то более прогрессивен и продвинут. Чего для него только нет... Для NSIS - чего надо, того никогда нет... :)
wolkow70
23-12-2013, 16:53
Никто не знает как в скрипте NSIS вызвать LaunchAdvancedAssociationUI для заданной программы?
(How to call LaunchAdvancedAssociationUI).
как в скрипте NSIS вызвать LaunchAdvancedAssociationUI для заданной программы? »
Дело это мутное до безобразия...
Был такой код по теме :
!include LogicLib.nsh
!define CLSCTX_INPROC_SERVER 0x1
!define CLSID_ApplicationAssociationRegistrationUI {1968106d-f3b5-44cf-890e-116fcb9ecef1}
!define IID_IApplicationAssociationRegistrationUI {1f76a169-f994-40ac-8fc8-0959e8874710} ;[Vista+]
section
System::Call 'OLE32::CoCreateInstance(g "${CLSID_ApplicationAssociationRegistrationUI}",i 0,i ${CLSCTX_INPROC_SERVER},g "${IID_IApplicationAssociationRegistrationUI}",*i.r1)i.r0' ;ptr is now in $1 and hr in $0
${If} $1 <> 0
System::Call '$1->3(w "MyApp")i.r0' ;IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
System::Call '$1->2()' ;IUnknown::Release
${EndIf}
sectionend
Только к нему много вопросов... К примеру, используемая функция IApplicationAssociationRegistrationUI, если верить примечанию, не поддерживается на Windows 8
( http://msdn.microsoft.com/en-us/library/windows/desktop/bb776332(v=vs.85).aspx )
А ты, как мне кажется, хочешь замутить канитель, именно применимо к ассоциированию в Win8 ? (а для других ОС и мутить нечего - всё ясно и традиционно...)
wolkow70
23-12-2013, 17:46
Никто не знает как в скрипте NSIS вызвать LaunchAdvancedAssociationUI для заданной программы? »
Вот сам уже нашел способ: http://ask.make-money-article.com/que/11179945
!include LogicLib.nsh
!define CLSCTX_INPROC_SERVER 0x1
!define CLSID_ApplicationAssociationRegistrationUI {1968106d-f3b5-44cf-890e-116fcb9ecef1}
!define IID_IApplicationAssociationRegistrationUI {1f76a169-f994-40ac-8fc8-0959e8874710} ;[Vista+]
section
;NSIS has called CoInitialize
System::Call 'OLE32::CoCreateInstance(g "${CLSID_ApplicationAssociationRegistrationUI}",i 0,i ${CLSCTX_INPROC_SERVER},g "${IID_IApplicationAssociationRegistrationUI}",*i.r1)i.r0' ;ptr is now in $1 and hr in $0
${If} $1 <> 0
System::Call '$1->3(w "Internet Explorer")i.r0' ;IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
System::Call '$1->2()' ;IUnknown::Release
${EndIf}
sectionend
Вместо "Internet Explorer" можно подставлять наименование программы, зарегистрированной в реестре в ключе
HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications
А ты, как мне кажется, хочешь замутить канитель, именно применимо к ассоциированию в Win8 ? (а для других ОС и мутить нечего - всё ясно и традиционно...) »
Да, чтобы при определении Win8 в конце установки открывался интерфейс ассоциаций для конкретной программы.
что бы при определении Win8 в конце установки открывался интерфейс ассоциаций для конкретной программы. »
Даже если и получится, то только радости с того мало, т.к. это в ряде случаев оч не удобно и бестолково. Я в соответсвующей теме в Win8, уже про это говорил год назад. Никто даже голоса не подал и ничего не предложил путного...
wolkow70
23-12-2013, 18:48
Даже если и получится, то только радости с того мало »
Получилось, работает! Тестировал на Windows 8 x64.
Применил данной способ в своей сборке Light Alloy.
http://forum.oszone.net/post-2277381-247.html
Интерфейс открывается только на Win 8, и только если при выборе компонентов была выбрана хоть одна ассоциация (и не в тихом режиме).
Можешь познакомиться для интереса.
Получилось »
Получилось - это когда перед установкой выбрал нужные ассоциации, установил прогу и всё ОК.
А ковыряться с выбором ассоциаций после установки - это лажа.
Krinkels
25-12-2013, 22:00
Друзья, вчера вышла новая версия NSIS( NSIS 3.0a2 ), обновляемся (http://prdownloads.sourceforge.net/nsis/nsis-3.0a2-setup.exe?download)
Друзья, вчера вышла новая версия NSIS( NSIS 3.0a2 ), обновляемся »
Windows 8.1 & 2012R2 support in WinVer.nsh
Неужели NSIS ожил и пошел в ногу со временем :up
Krinkels
26-12-2013, 07:57
Сам был в шоке, полез за сорцами, а там новая версия висит :)
Страница-фейс инсталлятора в виде круга.
С появлением рождественского подарка от винамповцев, библиотеки для перемещения окна за любую точку - можно завершить и затею с круглым фейсом.
Выглядит это так (ессно, как вариант) :
!addplugindir .
!include nsDialogs.nsh
!include WinMessages.nsh
Page Custom mypagecreate
Page InstFiles
OutFile "CreateRoundRectRgn.exe"
Var dlg
Var button
Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIR\s.bmp "s.bmp"
FunctionEnd
Function .onGUIInit
; вызов DLL для перемещения окна за любую точку
MoveAnywhere::Hook
; окно всегда поверх
System::Call "user32::SetWindowPos(i$HWNDPARENT,i-1,i,i,i,i,i3)"
; убрать заголовок
System::Call `user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},0x9480084C)i.R0`
; убрать пунктирную рамку границы при перетаскивании окна
System::Call "user32::SystemParametersInfo(i0x0025,i0,*i.R0,i0)"
System::Call "user32::SystemParametersInfo(i0x0025,i1,i0,i0)"
FunctionEnd
Function .onGUIEnd
System::Call "user32::SystemParametersInfo(i0x0025,iR0,i0,i0)"
FunctionEnd
Function mypagecreate
nsDialogs::Create 1018
Pop $dlg
; цвет
SetCtlColors $HWNDPARENT "" 0xbde2f4
SetCtlColors $dlg "" 0xbde2f4
${NSD_CreateButton} 33u 35u 80 59 ""
Pop $button
; устанавливаем свой стиль кнопки (помещаем рисунок на кнопку)
StrCpy $0 $PLUGINSDIR\s.bmp
${NSD_AddExStyle} $button ${WS_EX_TRANSPARENT}|${WS_EX_TOPMOST}
${NSD_AddStyle} $BUTTON "${BS_BITMAP}"
System::Call 'user32::LoadImage(i 0, t r0, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s'
Pop $6
SendMessage $BUTTON ${BM_SETIMAGE} ${IMAGE_BITMAP} $6
; фейс в виде круга
System::Call "*(i, i, i, i)i.r0"; создать новую структуру
System::Call "User32::GetClientRect(i$HWNDPARENT, ir0)"; Получить новые координаты структуры - в $0
System::Call "*$0(i, i, i.r1, i.r2)"
IntOp $1 $1 + 5
IntOp $2 $2 + 30
System::Call "Gdi32::CreateRoundRectRgn(i0,i0,i200,i200,i200,i200)i.r0"
System::Call "User32::SetWindowRgn(i$HWNDPARENT, ir0, i1)"
${NSD_OnClick} $button done
nsDialogs::Show
FunctionEnd
Function done
SendMessage $hwndparent ${WM_CLOSE} 0 0
FunctionEnd
Section
SectionEnd
Ессно кнопку делаем какую угодно и вешаем на неё что угодно.
Правда хотелось таскать фейс с рисунком в качестве фона, но что то у меня перетаскивание при этом не работает... Ну да и ладно...
Всем привет!
Кто-нибудь собирает себе NSIS из исходников? Вопрос вот в чем. Пробую компилировать NSIS в среде MS Visual Studio 2008 (все настройки по умолчанию). Все чудесно, все собирается, но... не могу понять, почему размеры файлов с шаблонами диалоговых окон (в папке ..NSIS\Contrib\UIs\) у меня получаются больше, чем в официальном релизе?
Оригинал
http://imgs.su/tmp/2013-12-26/1388074359-520.jpg
Моя компиляция
http://imgs.su/tmp/2013-12-26/1388074387-520.jpg
А у вас как? Случаем не знаете, что нужно сделать, чтобы размеры получались меньше? Или не заморачиваться по этому поводу?
Другой вопрос. На сайте загрузки есть архив с названием nsis-3.0a2-strlen_8192.zip. Как надо изменить исходный код программы, чтобы сразу компилировать это "strlen_8192"?
kotkovets
27-12-2013, 01:28
Кто-нибудь собирает себе NSIS из исходников? »
походу только разработчики и занимаются.. :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC