Пользователь
Сообщения: 94
Благодарности: 54
|
Профиль
|
Отправить PM
| Цитировать
Цитата Kopejkin:
Я попытался переделать вариант Flix, использующий скины SkinSharp, в инсталлятор с функцией удаления. Чтобы деинсталлятор тоже был "одет". »
|
Не надо было ничего переделывать, а только по аналогии добавить все тоже самое для деинсталлятора.
читать дальше »
Код:
# Поддержка Unicode
Unicode true
!include MUI2.nsh
!define PRODUCT_NAME "'Install-Uninstall SkinH'"
SetCompressor lzma
BrandingText "Nullsoft Scriptable Install System"
##################### Диалоги ИНСТАЛЛЯЦИИ #######################
; Подключаем стиль оформления к интерфейсу
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
; Показываем диалог приветствия
!insertmacro MUI_PAGE_WELCOME
; Показываем диалог с лицензией
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
; Включаем элемент с описанием компонентов в диалоге компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ENABLEDStyle
; Включаем элемент с описанием компонентов при наведении курсора мышки
!define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION ENABLEDStyle
; Показываем диалог с выбором компонентов установки
!insertmacro MUI_PAGE_COMPONENTS
; Показываем диалог с выбором пути установки
!insertmacro MUI_PAGE_DIRECTORY
; Показываем диалог установки файлов
!insertmacro MUI_PAGE_INSTFILES
; Показываем диалог завершения установки
!insertmacro MUI_PAGE_FINISH
#################################################################
################### Диалоги ДЕИНСТАЛЛЯЦИИ #######################
; Подключаем стиль оформления к интерфейсу
!define MUI_CUSTOMFUNCTION_UNGUIINIT un.onGUIIni
; Показываем диалог приветствия
!insertmacro MUI_UNPAGE_WELCOME
; Показываем диалог подтверждения
!insertmacro MUI_UNPAGE_CONFIRM
; Включаем элемент с описанием компонентов в диалоге компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ENABLEDStyle
; Включаем элемент с описанием компонентов при наведении курсора мышки
!define MUI_CUSTOMFUNCTION_UNONMOUSEOVERSECTION un.ENABLEDStyle
; Показываем диалог с выбором компонентов деинсталляции
!insertmacro MUI_UNPAGE_COMPONENTS
; Показываем диалог удаления файлов
!insertmacro MUI_UNPAGE_INSTFILES
; Показываем диалог завершения
!insertmacro MUI_UNPAGE_FINISH
#################################################################
; Язык инсталлятора - Русский
!insertmacro MUI_LANGUAGE "Russian"
; Имя инсталлятора
Name "${PRODUCT_NAME}"
; Путь и имя файла инсталлятора
OutFile "UninSkinH.exe"
; Путь установки по умолчанию
InstallDir "$PROGRAMFILES\My application"
Section "Секция 1" SEC1
; Файлы для установки
SectionEnd
Section "Секция 2" SEC2
; Файлы для установки
SectionEnd
Section "Секция 3" SEC3
SetOutPath $INSTDIR
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
; Секция деинсталлятора
Section "Uninstall" SEC4
delete "$INSTDIR\Uninstall.exe"
SetShellVarContext all
RMDir /r "$INSTDIR"
SectionEnd
; Описание компонентов =ИНСТАЛЛЯТОРА=
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции"
!insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции"
!insertmacro MUI_DESCRIPTION_TEXT ${SEC3} "Описание третьей секции"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
; Описание компонентов =ДЕИНСТАЛЛЯТОРА=
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC4} "Описание секции деинсталлятора"
!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
; Функция скинизации интерфейса при инициализации GUI =ИНСТАЛЛЯТОРА=
Function onGUIInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "${NSISDIR}\Plugins\x86-unicode\SkinH.dll"
File "${NSISDIR}\Contrib\Skins\0012.she"
# Убираем дефект отображения текста с надписью бренда -------
; Получаем дескриптор элемента управления с надписью бренда
GetDlgItem $0 $HWNDPARENT 1028
; Включаем элемент управления (1- включить, 0- отключить)
EnableWindow $0 1
# -----------------------------------------------------------
;При помощи функции SkinH_AttachExt загружаем файл стиля с именем 0012.she
System::Call SkinH::SkinH_AttachExt(t'$PLUGINSDIR\0012.she',,i-150,i-0,i-0)
#################### 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
; Функция выгрузки SkinH.dll при закрытии GUI =ИНСТАЛЛЯТОРА=
Function .onGUIEnd
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.s
System::Call Kernel32::FreeLibrary(is)
System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\")
FunctionEnd
; Функция скинизации интерфейса при инициализации GUI =ДЕИНСТАЛЛЯТОРА=
Function un.onGUIIni
InitPluginsDir
SetOutPath $PLUGINSDIR
File "${NSISDIR}\Plugins\x86-unicode\SkinH.dll"
File "${NSISDIR}\Contrib\Skins\0012.she"
# Убираем дефект отображения текста с надписью бренда -------
; Получаем дескриптор элемента управления с надписью бренда
GetDlgItem $0 $HWNDPARENT 1028
; Включаем элемент управления (1- включить, 0- отключить)
EnableWindow $0 1
# -----------------------------------------------------------
;При помощи функции SkinH_AttachExt загружаем файл стиля с именем 0012.she
System::Call SkinH::SkinH_AttachExt(t'$PLUGINSDIR\0012.she',,i-30,i-0,i-0)
#################### 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
; Функция выгрузки SkinH.dll при закрытии GUI =ДЕИНСТАЛЛЯТОРА=
Function un.onGUIEnd
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.s
System::Call Kernel32::FreeLibrary(is)
System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\")
FunctionEnd
; Функция, которая включает элемент с описанием компонентов.
; Используется для диалога с выбором компонентов при инсталляции.
Function ENABLEDStyle
; Выполняем поиск окна
FindWindow $0 "#32770" "" $HWNDPARENT
; Получаем дескриптор элемента управления с описанием компонентов
GetDlgItem $1 $0 1043
; Включаем элемент управления
EnableWindow $1 1
FunctionEnd
; Функция, которая включает элемент с описанием компонентов.
; Используется для диалога с выбором компонентов при деинсталляции.
Function un.ENABLEDStyle
; Выполняем поиск окна
FindWindow $0 "#32770" "" $HWNDPARENT
; Получаем дескриптор элемента управления с описанием компонентов
GetDlgItem $1 $0 1043
; Включаем элемент управления
EnableWindow $1 1
FunctionEnd
|
Отправлено: 03:26, 01-03-2014
| #1062
|