.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 12
Аватара пользователя
Limonica

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Limonica »

Не ну серьезно, неужели нельзя установить новое устройство средствами NSIS?
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Попробовал применить скины к инсталлятору с помощью ISSkinEx (
.: NSIS - все вопросы :. часть 2.
)

На некоторых скинах BrandingText выгладит неопрятно.



Изображение



Например: скин tiger



Можно ли что-нибудь сделать?



В Справочнике NSIS есть пример изменения цвета BrandingText.

В стандартном примере скрипта (WelcomeFinish.nsi) - прекрасно работает.

В различных примерах со скинами (см. ссылку MKN выше) - нет.

И что самое обидное ( Изображение ) в моем, вполне рабочем скрипте без скинов, самодельных окон - в общем, довольно простеньком - тоже не работает. Хотя особой надобности что-либо делать с BrandingText нет - отображается вполне прилично.



Есть ли ограничения применения этого примера? Или что необходимо учитывать?
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата Kopejkin:



Попробовал применить скины к инсталлятору с помощью ISSkinEx

На некоторых скинах BrandingText выгладит неопрятно.
.: NSIS - все вопросы :. часть 2.




Возможно дело в самом 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 с соответствующим флагом, необходима, чтобы убрать пунктирную рамку границы окна , появляющуюся при перетаскивании окна инсталлятора.



Но у меня не получилось - полностью закрасить круг. ( с прямоугольным окном получается).

Как это можно сделать, у кого какие соображения ?
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата MKN:



Но у меня не получилось - полностью закрасить круг. ( с прямоугольным окном получается).

Как это можно сделать, у кого какие соображения ?
.: NSIS - все вопросы :. часть 2.






Код:

Код: Выделить всё

Function mypagecreate
nsDialogs::Create 1018
Pop $dlg
SetCtlColors $HWNDPARENT "" 0x80FF00
SetCtlColors $dlg "" 0x80FF00
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата MKN:



Но у меня не получилось - полностью закрасить круг
.: NSIS - все вопросы :. часть 2.




не получится просто так - это заголовок окна (стиль окна системы), можно перерисовать заголовок, но стандартно не получится,

а можно убрать у окна заголовок, удалить стиль заголовка, но переместить окошко тогда не удасться
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата kotkovets:



а можно убрать у окна заголовок, удалить стиль заголовка, но переместить окошко тогда не удасться
.: NSIS - все вопросы :. часть 2.




Да, мешает загловок... Убрать его , как уже выясняли, не проблема. Теперь надо организовать возможность перемещения окна НЕ за заголовок.

Самое простое - запускать вместе со скриптом утилитку для этого (типа MoveInactiveWin). Но так не интересно...

В то же время пишут, что можно сделать так :
http://computista.ru/030600.shtml


или использовать сообщение WM_NCHITTEST, которое есть даже в WinMessages.nsh.

Только как это сделать на практике ?
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата MKN:



Только как это сделать на практике ?
.: NSIS - все вопросы :. часть 2.




стандартно невозможно, только плагином
Аватара пользователя
vahe-91

Re: .: NSIS - все вопросы :. часть 2.

Сообщение vahe-91 »

Цитата kotkovets:



только плагином
.: NSIS - все вопросы :. часть 2.




Которого не существует... Inno в этом плане как то более прогрессивен и продвинут. Чего для него только нет... Для NSIS - чего надо, того никогда нет... Изображение
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Никто не знает как в скрипте NSIS вызвать LaunchAdvancedAssociationUI для заданной программы?

(How to call LaunchAdvancedAssociationUI).
Аватара пользователя
vahe-91

Re: .: NSIS - все вопросы :. часть 2.

Сообщение vahe-91 »

Цитата wolkow70:



как в скрипте NSIS вызвать LaunchAdvancedAssociationUI для заданной программы?
.: NSIS - все вопросы :. часть 2.




Дело это мутное до безобразия...

Был такой код по теме :



Код:

Код: Выделить всё

!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/libr...(v=vs.85).aspx
)

А ты, как мне кажется, хочешь замутить канитель, именно применимо к ассоциированию в Win8 ? (а для других ОС и мутить нечего - всё ясно и традиционно...)
Ответить

Вернуться в «Автоматическая установка приложений»