Change compression algo, organized directory, small changes to T7x
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 639 KiB |
@ -1,75 +0,0 @@
|
||||
!ifndef COLORS_NSH
|
||||
!define COLORS_NSH
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
# Squad
|
||||
# Rob Segal
|
||||
# Joel
|
||||
# Yathosho
|
||||
|
||||
|
||||
# Predefined HTML Hex colors
|
||||
!define WHITE "FFFFFF"
|
||||
!define BLACK "000000"
|
||||
!define YELLOW "FFFF00"
|
||||
!define RED "FF0000"
|
||||
!define GREEN "00FF00"
|
||||
!define BLUE "0000FF"
|
||||
!define MAGENTA "FF00FF"
|
||||
!define CYAN "00FFFF"
|
||||
|
||||
# Function to convert red , green and blue integer values to HTML Hex format
|
||||
!define RGB '!insertmacro rgb2hex'
|
||||
|
||||
# Function to convert red, green and blue integer values to Hexadecimal (0xRRGGBB) format
|
||||
!define HEX '!insertmacro rgb2hex2'
|
||||
|
||||
# Function to get the r value from a RGB number
|
||||
!define GetRvalue '!insertmacro redvalue'
|
||||
|
||||
# Function to get the g value from a RGB number
|
||||
!define GetGvalue '!insertmacro greenvalue'
|
||||
|
||||
# Function to get the b value from a RGB number
|
||||
!define GetBvalue '!insertmacro bluevalue'
|
||||
|
||||
# Function to get the r value from a Hex number
|
||||
!define GetRvalueX '!insertmacro bluevalue'
|
||||
|
||||
# Function to get the g value from a Hex number
|
||||
!define GetGvalueX '!insertmacro greenvalue'
|
||||
|
||||
# Function to get the r value from a HEX number
|
||||
!define GetBvalueX '!insertmacro redvalue'
|
||||
|
||||
!macro rgb2hex output R G B
|
||||
IntFmt "${output}" "%02X" "${R}"
|
||||
IntFmt "${output}" "${output}%02X" "${G}"
|
||||
IntFmt "${output}" "${output}%02X" "${B}"
|
||||
!macroend
|
||||
|
||||
!macro rgb2hex2 output R G B
|
||||
IntFmt "${output}" "%02X" "${B}"
|
||||
IntFmt "${output}" "${output}%02X" "${G}"
|
||||
IntFmt "${output}" "${output}%02X" "${R}"
|
||||
!macroend
|
||||
|
||||
!macro redvalue output hexval
|
||||
StrCpy ${output} ${hexval} 2 0
|
||||
IntFmt "${output}" "%02i" "0x${output}"
|
||||
!macroend
|
||||
|
||||
!macro greenvalue output hexval
|
||||
StrCpy ${output} ${hexval} 2 2
|
||||
IntFmt "${output}" "%02i" "0x${output}"
|
||||
!macroend
|
||||
|
||||
!macro bluevalue output hexval
|
||||
StrCpy ${output} ${hexval} 2 4
|
||||
IntFmt "${output}" "%02i" "0x${output}"
|
||||
!macroend
|
||||
|
||||
!verbose pop
|
||||
!endif
|
@ -1,240 +0,0 @@
|
||||
/*
|
||||
|
||||
InstallOptions.nsh
|
||||
Macros and conversion functions for InstallOptions
|
||||
|
||||
*/
|
||||
|
||||
!ifndef ___NSIS__INSTALL_OPTIONS__NSH___
|
||||
!define ___NSIS__INSTALL_OPTIONS__NSH___
|
||||
|
||||
!include LogicLib.nsh
|
||||
|
||||
!macro INSTALLOPTIONS_FUNCTION_READ_CONVERT
|
||||
!insertmacro INSTALLOPTIONS_FUNCTION_IO2NSIS ""
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_UNFUNCTION_READ_CONVERT
|
||||
!insertmacro INSTALLOPTIONS_FUNCTION_IO2NSIS un.
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT
|
||||
!insertmacro INSTALLOPTIONS_FUNCTION_NSIS2IO ""
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT
|
||||
!insertmacro INSTALLOPTIONS_FUNCTION_NSIS2IO un.
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_FUNCTION_NSIS2IO UNINSTALLER_FUNCPREFIX
|
||||
|
||||
; Convert an NSIS string to a form suitable for use by InstallOptions
|
||||
; Usage:
|
||||
; Push <NSIS-string>
|
||||
; Call Nsis2Io
|
||||
; Pop <IO-string>
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}Nsis2Io
|
||||
|
||||
Exch $0 ; The source
|
||||
Push $1 ; The output
|
||||
Push $2 ; Temporary char
|
||||
Push $3 ; Length
|
||||
Push $4 ; Loop index
|
||||
StrCpy $1 "" ; Initialise the output
|
||||
|
||||
StrLen $3 $0
|
||||
IntOp $3 $3 - 1
|
||||
|
||||
${For} $4 0 $3
|
||||
StrCpy $2 $0 1 $4
|
||||
${If} $2 == '\'
|
||||
StrCpy $2 '\\'
|
||||
${ElseIf} $2 == '$\r'
|
||||
StrCpy $2 '\r'
|
||||
${ElseIf} $2 == '$\n'
|
||||
StrCpy $2 '\n'
|
||||
${ElseIf} $2 == '$\t'
|
||||
StrCpy $2 '\t'
|
||||
${EndIf}
|
||||
StrCpy $1 $1$2
|
||||
${Next}
|
||||
|
||||
StrCpy $0 $1
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
|
||||
FunctionEnd
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_FUNCTION_IO2NSIS UNINSTALLER_FUNCPREFIX
|
||||
|
||||
; Convert an InstallOptions string to a form suitable for use by NSIS
|
||||
; Usage:
|
||||
; Push <IO-string>
|
||||
; Call Io2Nsis
|
||||
; Pop <NSIS-string>
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}Io2Nsis
|
||||
|
||||
Exch $0 ; The source
|
||||
Push $1 ; The output
|
||||
Push $2 ; Temporary char
|
||||
Push $3 ; Length
|
||||
Push $4 ; Loop index
|
||||
StrCpy $1 "" ; Initialise the output
|
||||
|
||||
StrLen $3 $0
|
||||
IntOp $3 $3 - 1
|
||||
|
||||
${For} $4 0 $3
|
||||
StrCpy $2 $0 2 $4
|
||||
${If} $2 == '\\'
|
||||
StrCpy $2 '\'
|
||||
IntOp $4 $4 + 1
|
||||
${ElseIf} $2 == '\r'
|
||||
StrCpy $2 '$\r'
|
||||
IntOp $4 $4 + 1
|
||||
${ElseIf} $2 == '\n'
|
||||
StrCpy $2 '$\n'
|
||||
IntOp $4 $4 + 1
|
||||
${ElseIf} $2 == '\t'
|
||||
StrCpy $2 '$\t'
|
||||
IntOp $4 $4 + 1
|
||||
${EndIf}
|
||||
StrCpy $2 $2 1
|
||||
StrCpy $1 $1$2
|
||||
${Next}
|
||||
|
||||
StrCpy $0 $1
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
|
||||
FunctionEnd
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_EXTRACT FILE
|
||||
|
||||
InitPluginsDir
|
||||
File "/oname=$PLUGINSDIR\${FILE}" "${FILE}"
|
||||
!insertmacro INSTALLOPTIONS_WRITE "${FILE}" "Settings" "RTL" "$(^RTL)"
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_EXTRACT_AS FILE FILENAME
|
||||
|
||||
InitPluginsDir
|
||||
File "/oname=$PLUGINSDIR\${FILENAME}" "${FILE}"
|
||||
!insertmacro INSTALLOPTIONS_WRITE "${FILENAME}" "Settings" "RTL" "$(^RTL)"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_DISPLAY FILE
|
||||
|
||||
Push $0
|
||||
|
||||
InstallOptions::dialog "$PLUGINSDIR\${FILE}"
|
||||
Pop $0
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_DISPLAY_RETURN FILE
|
||||
|
||||
InstallOptions::dialog "$PLUGINSDIR\${FILE}"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_INITDIALOG FILE
|
||||
|
||||
InstallOptions::initDialog "$PLUGINSDIR\${FILE}"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_SHOW
|
||||
|
||||
Push $0
|
||||
|
||||
InstallOptions::show
|
||||
Pop $0
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_SHOW_RETURN
|
||||
|
||||
InstallOptions::show
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_READ VAR FILE SECTION KEY
|
||||
|
||||
ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE
|
||||
|
||||
WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" "${VALUE}"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_READ_CONVERT VAR FILE SECTION KEY
|
||||
|
||||
ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}"
|
||||
Push ${VAR}
|
||||
Call Io2Nsis
|
||||
Pop ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_READ_UNCONVERT VAR FILE SECTION KEY
|
||||
|
||||
ReadIniStr ${VAR} "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}"
|
||||
Push ${VAR}
|
||||
Call un.Io2Nsis
|
||||
Pop ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_WRITE_CONVERT FILE SECTION KEY VALUE
|
||||
|
||||
Push $0
|
||||
StrCpy $0 "${VALUE}"
|
||||
Push $0
|
||||
Call Nsis2Io
|
||||
Pop $0
|
||||
|
||||
WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" $0
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro INSTALLOPTIONS_WRITE_UNCONVERT FILE SECTION KEY VALUE
|
||||
|
||||
Push $0
|
||||
StrCpy $0 "${VALUE}"
|
||||
Push $0
|
||||
Call un.Nsis2Io
|
||||
Pop $0
|
||||
|
||||
WriteIniStr "$PLUGINSDIR\${FILE}" "${SECTION}" "${KEY}" $0
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!endif # ___NSIS__INSTALL_OPTIONS__NSH___
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
|
||||
LangFile.nsh
|
||||
|
||||
Header file to create langauge files that can be
|
||||
included with a single command.
|
||||
|
||||
Copyright 2008-2009 Joost Verburg
|
||||
|
||||
* Either LANGFILE_INCLUDE or LANGFILE_INCLUDE_WITHDEFAULT
|
||||
can be called from the script to include a language
|
||||
file.
|
||||
|
||||
- LANGFILE_INCLUDE takes the language file name as parameter.
|
||||
- LANGFILE_INCLUDE_WITHDEFAULT takes as additional second
|
||||
parameter the default language file to load missing strings
|
||||
from.
|
||||
|
||||
* A language file start with:
|
||||
!insertmacro LANGFILE_EXT "English"
|
||||
using the same name as the standard NSIS language file.
|
||||
|
||||
* Language strings in the language file have the format:
|
||||
${LangFileString} LANGSTRING_NAME "Text"
|
||||
|
||||
*/
|
||||
|
||||
!ifndef LANGFILE_INCLUDED
|
||||
!define LANGFILE_INCLUDED
|
||||
|
||||
!macro LANGFILE_INCLUDE FILENAME
|
||||
|
||||
;Called from script: include a langauge file
|
||||
|
||||
!ifdef LangFileString
|
||||
!undef LangFileString
|
||||
!endif
|
||||
|
||||
!define LangFileString "!insertmacro LANGFILE_SETSTRING"
|
||||
|
||||
!define LANGFILE_SETNAMES
|
||||
!include "${FILENAME}"
|
||||
!undef LANGFILE_SETNAMES
|
||||
|
||||
;Create language strings
|
||||
|
||||
!undef LangFileString
|
||||
!define LangFileString "!insertmacro LANGFILE_LANGSTRING"
|
||||
!include "${FILENAME}"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro LANGFILE_INCLUDE_WITHDEFAULT FILENAME FILENAME_DEFAULT
|
||||
|
||||
;Called from script: include a langauge file
|
||||
;Obtains missing strings from a default file
|
||||
|
||||
!ifdef LangFileString
|
||||
!undef LangFileString
|
||||
!endif
|
||||
|
||||
!define LangFileString "!insertmacro LANGFILE_SETSTRING"
|
||||
|
||||
!define LANGFILE_SETNAMES
|
||||
!include "${FILENAME}"
|
||||
!undef LANGFILE_SETNAMES
|
||||
|
||||
;Include default language for missing strings
|
||||
!include "${FILENAME_DEFAULT}"
|
||||
|
||||
;Create language strings
|
||||
!undef LangFileString
|
||||
!define LangFileString "!insertmacro LANGFILE_LANGSTRING"
|
||||
!include "${FILENAME_DEFAULT}"
|
||||
|
||||
!macroend
|
||||
|
||||
!macro LANGFILE IDNAME NAME
|
||||
|
||||
;Start of standard NSIS language file
|
||||
|
||||
!ifdef LANGFILE_SETNAMES
|
||||
|
||||
!ifdef LANGFILE_IDNAME
|
||||
!undef LANGFILE_IDNAME
|
||||
!endif
|
||||
|
||||
!define LANGFILE_IDNAME "${IDNAME}"
|
||||
|
||||
!ifndef "LANGFILE_${IDNAME}_NAME"
|
||||
!define "LANGFILE_${IDNAME}_NAME" "${NAME}"
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro LANGFILE_EXT IDNAME
|
||||
|
||||
;Start of installer language file
|
||||
|
||||
!ifdef LANGFILE_SETNAMES
|
||||
|
||||
!ifdef LANGFILE_IDNAME
|
||||
!undef LANGFILE_IDNAME
|
||||
!endif
|
||||
|
||||
!define LANGFILE_IDNAME "${IDNAME}"
|
||||
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro LANGFILE_SETSTRING NAME VALUE
|
||||
|
||||
;Set define with translated string
|
||||
|
||||
!ifndef ${NAME}
|
||||
!define "${NAME}" "${VALUE}"
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro LANGFILE_LANGSTRING NAME DUMMY
|
||||
|
||||
;Create a language string from a define and undefine
|
||||
|
||||
LangString "${NAME}" "${LANG_${LANGFILE_IDNAME}}" "${${NAME}}"
|
||||
!undef "${NAME}"
|
||||
|
||||
!macroend
|
||||
|
||||
!endif
|
@ -1,870 +0,0 @@
|
||||
#
|
||||
# Library.nsh
|
||||
#
|
||||
# A system for the installation and uninstallation of dynamic
|
||||
# link libraries (DLL) and type libraries (TLB). Using this
|
||||
# system you can handle the complete setup with one single
|
||||
# line of code:
|
||||
#
|
||||
# * File copying
|
||||
# * File copying on reboot
|
||||
# * Version checks
|
||||
# * Registration and unregistration
|
||||
# * Registration and unregistration on reboot
|
||||
# * Shared DLL counting
|
||||
# * Windows File Protection checks
|
||||
#
|
||||
# For more information, read appendix B in the documentation.
|
||||
#
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!ifndef LIB_INCLUDED
|
||||
|
||||
!define LIB_INCLUDED
|
||||
|
||||
!ifndef SHCNE_ASSOCCHANGED
|
||||
!define SHCNE_ASSOCCHANGED 0x08000000
|
||||
!endif
|
||||
!ifndef SHCNF_IDLIST
|
||||
!define SHCNF_IDLIST 0x0000
|
||||
!endif
|
||||
|
||||
!define REGTOOL_VERSION v3
|
||||
!define REGTOOL_KEY NSIS.Library.RegTool.${REGTOOL_VERSION}
|
||||
|
||||
!include LogicLib.nsh
|
||||
!include x64.nsh
|
||||
|
||||
### GetParent macro, don't pass $1 or $2 as INTPUT or OUTPUT
|
||||
!macro __InstallLib_Helper_GetParent INPUT OUTPUT
|
||||
|
||||
# Copied from FileFunc.nsh
|
||||
|
||||
StrCpy ${OUTPUT} ${INPUT}
|
||||
|
||||
Push $1
|
||||
Push $2
|
||||
|
||||
StrCpy $2 ${OUTPUT} 1 -1
|
||||
StrCmp $2 '\' 0 +3
|
||||
StrCpy ${OUTPUT} ${OUTPUT} -1
|
||||
goto -3
|
||||
|
||||
StrCpy $1 0
|
||||
IntOp $1 $1 - 1
|
||||
StrCpy $2 ${OUTPUT} 1 $1
|
||||
StrCmp $2 '\' +2
|
||||
StrCmp $2 '' 0 -3
|
||||
StrCpy ${OUTPUT} ${OUTPUT} $1
|
||||
|
||||
Pop $2
|
||||
Pop $1
|
||||
|
||||
!macroend
|
||||
|
||||
### Initialize session id (GUID)
|
||||
!macro __InstallLib_Helper_InitSession
|
||||
|
||||
!ifndef __InstallLib_SessionGUID_Defined
|
||||
|
||||
!define __InstallLib_SessionGUID_Defined
|
||||
|
||||
Var /GLOBAL __INSTALLLLIB_SESSIONGUID
|
||||
|
||||
!endif
|
||||
|
||||
!define __InstallLib_Helper_InitSession_Label "Library_${__FILE__}${__LINE__}"
|
||||
|
||||
StrCmp $__INSTALLLLIB_SESSIONGUID '' 0 "${__InstallLib_Helper_InitSession_Label}"
|
||||
|
||||
System::Call 'ole32::CoCreateGuid(g .s)'
|
||||
Pop $__INSTALLLLIB_SESSIONGUID
|
||||
|
||||
"${__InstallLib_Helper_InitSession_Label}:"
|
||||
|
||||
!undef __InstallLib_Helper_InitSession_Label
|
||||
|
||||
!macroend
|
||||
|
||||
### Add a RegTool entry to register after reboot
|
||||
!macro __InstallLib_Helper_AddRegToolEntry mode filename tempdir
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
|
||||
;------------------------
|
||||
;Copy the parameters
|
||||
|
||||
Push "${filename}"
|
||||
Push "${tempdir}"
|
||||
|
||||
Pop $R2 ; temporary directory
|
||||
Pop $R1 ; file name to register
|
||||
|
||||
;------------------------
|
||||
;Initialize session id
|
||||
|
||||
!insertmacro __InstallLib_Helper_InitSession
|
||||
|
||||
;------------------------
|
||||
;Advance counter
|
||||
|
||||
StrCpy $R0 0
|
||||
ReadRegDWORD $R0 HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count"
|
||||
IntOp $R0 $R0 + 1
|
||||
WriteRegDWORD HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count" "$R0"
|
||||
|
||||
;------------------------
|
||||
;Setup RegTool
|
||||
|
||||
ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "${REGTOOL_KEY}"
|
||||
StrCpy $R3 $R3 -4 1
|
||||
IfFileExists $R3 +3
|
||||
|
||||
File /oname=$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe "${NSISDIR}\Bin\RegTool.bin"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
|
||||
"${REGTOOL_KEY}" '"$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe" /S'
|
||||
|
||||
;------------------------
|
||||
;Add RegTool entry
|
||||
|
||||
WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.file" "$R1"
|
||||
WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.mode" "${mode}"
|
||||
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
!macroend
|
||||
|
||||
### Get library version
|
||||
!macro __InstallLib_Helper_GetVersion TYPE FILE
|
||||
|
||||
!tempfile LIBRARY_TEMP_NSH
|
||||
|
||||
!ifdef NSIS_WIN32_MAKENSIS
|
||||
|
||||
!execute '"${NSISDIR}\Bin\LibraryLocal.exe" "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
|
||||
|
||||
!else
|
||||
|
||||
!execute 'LibraryLocal "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
|
||||
|
||||
!if ${TYPE} == 'T'
|
||||
|
||||
!warning "LibraryLocal currently supports TypeLibs version detection on Windows only"
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!include "${LIBRARY_TEMP_NSH}"
|
||||
!delfile "${LIBRARY_TEMP_NSH}"
|
||||
!undef LIBRARY_TEMP_NSH
|
||||
|
||||
!macroend
|
||||
|
||||
### Install library
|
||||
!macro InstallLib libtype shared install localfile destfile tempbasedir
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
Push $R4
|
||||
Push $R5
|
||||
|
||||
;------------------------
|
||||
;Define
|
||||
|
||||
!define INSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
|
||||
|
||||
!define INSTALLLIB_LIBTYPE_${libtype}
|
||||
!define INSTALLLIB_LIBTYPE_SET INSTALLLIB_LIBTYPE_${libtype}
|
||||
!define INSTALLLIB_SHARED_${shared}
|
||||
!define INSTALLLIB_SHARED_SET INSTALLLIB_SHARED_${shared}
|
||||
!define INSTALLLIB_INSTALL_${install}
|
||||
!define INSTALLLIB_INSTALL_SET INSTALLLIB_INSTALL_${install}
|
||||
|
||||
;------------------------
|
||||
;Validate
|
||||
|
||||
!ifndef INSTALLLIB_LIBTYPE_DLL & INSTALLLIB_LIBTYPE_REGDLL & INSTALLLIB_LIBTYPE_TLB & \
|
||||
INSTALLLIB_LIBTYPE_REGDLLTLB & INSTALLLIB_LIBTYPE_REGEXE
|
||||
!error "InstallLib: Incorrect setting for parameter: libtype"
|
||||
!endif
|
||||
|
||||
!ifndef INSTALLLIB_INSTALL_REBOOT_PROTECTED & INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED & \
|
||||
INSTALLLIB_INSTALL_NOREBOOT_PROTECTED & INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
|
||||
!error "InstallLib: Incorrect setting for parameter: install"
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;x64 settings
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
${DisableX64FSRedirection}
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Copy the parameters used on run-time to a variable
|
||||
;This allows the usage of variables as parameter
|
||||
|
||||
StrCpy $R4 "${destfile}"
|
||||
StrCpy $R5 "${tempbasedir}"
|
||||
|
||||
;------------------------
|
||||
;Shared library count
|
||||
|
||||
!ifndef INSTALLLIB_SHARED_NOTSHARED
|
||||
|
||||
StrCmp ${shared} "" 0 "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
SetRegView 64
|
||||
|
||||
!endif
|
||||
|
||||
ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4
|
||||
ClearErrors
|
||||
IntOp $R0 $R0 + 1
|
||||
WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4 $R0
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
SetRegView lastused
|
||||
|
||||
!endif
|
||||
|
||||
"installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Check Windows File Protection
|
||||
|
||||
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_PROTECTED
|
||||
|
||||
!define LIBRARY_DEFINE_DONE_LABEL
|
||||
|
||||
System::Call "sfc::SfcIsFileProtected(i 0, w R4) i.R0"
|
||||
|
||||
StrCmp $R0 "error" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
|
||||
StrCmp $R0 "0" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
Goto "installlib.done_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
"installlib.notprotected_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Check file
|
||||
|
||||
IfFileExists $R4 0 "installlib.copy_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;Get version information
|
||||
|
||||
!ifndef LIBRARY_IGNORE_VERSION
|
||||
|
||||
!insertmacro __InstallLib_Helper_GetVersion D "${LOCALFILE}"
|
||||
|
||||
!ifdef LIBRARY_VERSION_FILENOTFOUND
|
||||
!error "InstallLib: The library ${LOCALFILE} could not be found."
|
||||
!endif
|
||||
|
||||
!ifndef LIBRARY_VERSION_NONE
|
||||
|
||||
!define LIBRARY_DEFINE_UPGRADE_LABEL
|
||||
!define LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
StrCpy $R0 ${LIBRARY_VERSION_HIGH}
|
||||
StrCpy $R1 ${LIBRARY_VERSION_LOW}
|
||||
|
||||
GetDLLVersion $R4 $R2 $R3
|
||||
|
||||
!undef LIBRARY_VERSION_HIGH
|
||||
!undef LIBRARY_VERSION_LOW
|
||||
|
||||
!ifndef INSTALLLIB_LIBTYPE_TLB & INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
|
||||
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!else
|
||||
|
||||
!insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}"
|
||||
|
||||
!ifdef LIBRARY_VERSION_FILENOTFOUND
|
||||
!error "InstallLib: The library ${LOCALFILE} could not be found."
|
||||
!endif
|
||||
|
||||
!ifndef LIBRARY_VERSION_NONE
|
||||
|
||||
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
IntCmpU $R1 $R3 0 "installlib.register_${INSTALLLIB_UNIQUE}" \
|
||||
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!else
|
||||
|
||||
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
|
||||
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!else
|
||||
|
||||
!undef LIBRARY_VERSION_NONE
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
!insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}"
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
!ifndef LIBRARY_VERSION_NONE
|
||||
|
||||
!ifndef LIBRARY_DEFINE_UPGRADE_LABEL
|
||||
|
||||
!define LIBRARY_DEFINE_UPGRADE_LABEL
|
||||
|
||||
!endif
|
||||
|
||||
!ifndef LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
!define LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
!endif
|
||||
|
||||
StrCpy $R0 ${LIBRARY_VERSION_HIGH}
|
||||
StrCpy $R1 ${LIBRARY_VERSION_LOW}
|
||||
|
||||
TypeLib::GetLibVersion $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
|
||||
IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
|
||||
"installlib.upgrade_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!undef LIBRARY_VERSION_HIGH
|
||||
!undef LIBRARY_VERSION_LOW
|
||||
|
||||
!else
|
||||
|
||||
!undef LIBRARY_VERSION_NONE
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Upgrade
|
||||
|
||||
!ifdef LIBRARY_DEFINE_UPGRADE_LABEL
|
||||
|
||||
!undef LIBRARY_DEFINE_UPGRADE_LABEL
|
||||
|
||||
"installlib.upgrade_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Copy
|
||||
|
||||
!ifdef INSTALLLIB_INSTALL_NOREBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
|
||||
|
||||
"installlib.copy_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
StrCpy $R0 $R4
|
||||
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!else
|
||||
|
||||
!ifndef LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
!define LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
!endif
|
||||
|
||||
!ifndef LIBRARY_DEFINE_DONE_LABEL
|
||||
|
||||
!define LIBRARY_DEFINE_DONE_LABEL
|
||||
|
||||
!endif
|
||||
|
||||
ClearErrors
|
||||
|
||||
StrCpy $R0 $R4
|
||||
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
IfErrors 0 "installlib.register_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
SetOverwrite lastused
|
||||
|
||||
;------------------------
|
||||
;Copy on reboot
|
||||
|
||||
GetTempFileName $R0 $R5
|
||||
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
|
||||
Rename /REBOOTOK $R0 $R4
|
||||
|
||||
;------------------------
|
||||
;Register on reboot
|
||||
|
||||
Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
Goto "installlib.done_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
"installlib.copy_${INSTALLLIB_UNIQUE}:"
|
||||
StrCpy $R0 $R4
|
||||
Call ":installlib.file_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Register
|
||||
|
||||
!ifdef LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
!undef LIBRARY_DEFINE_REGISTER_LABEL
|
||||
|
||||
"installlib.register_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB | INSTALLLIB_LIBTYPE_REGEXE
|
||||
|
||||
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
|
||||
|
||||
IfRebootFlag 0 "installlib.regnoreboot_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
Goto "installlib.registerfinish_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
"installlib.regnoreboot_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
TypeLib::Register $R4
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
!ifndef LIBRARY_X64
|
||||
|
||||
RegDll $R4
|
||||
|
||||
!else
|
||||
|
||||
ExecWait '"$SYSDIR\regsvr32.exe" /s "$R4"'
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_REGEXE
|
||||
|
||||
ExecWait '"$R4" /regserver'
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
|
||||
|
||||
"installlib.registerfinish_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef LIBRARY_SHELL_EXTENSION
|
||||
|
||||
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef LIBRARY_COM
|
||||
|
||||
System::Call 'Ole32::CoFreeUnusedLibraries()'
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Done
|
||||
|
||||
!ifdef LIBRARY_DEFINE_DONE_LABEL
|
||||
|
||||
!undef LIBRARY_DEFINE_DONE_LABEL
|
||||
|
||||
"installlib.done_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
Pop $R5
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
;------------------------
|
||||
;End
|
||||
|
||||
Goto "installlib.end_${INSTALLLIB_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;Extract
|
||||
|
||||
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
|
||||
|
||||
SetOverwrite try
|
||||
|
||||
!else
|
||||
|
||||
SetOverwrite on
|
||||
|
||||
!endif
|
||||
|
||||
"installlib.file_${INSTALLLIB_UNIQUE}:"
|
||||
SetFileAttributes $R0 FILE_ATTRIBUTE_NORMAL
|
||||
ClearErrors
|
||||
File /oname=$R0 "${LOCALFILE}"
|
||||
Return
|
||||
|
||||
SetOverwrite lastused
|
||||
|
||||
;------------------------
|
||||
;Register on reboot
|
||||
|
||||
!ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
|
||||
|
||||
"installlib.regonreboot_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
!ifndef LIBRARY_X64
|
||||
!insertmacro __InstallLib_Helper_AddRegToolEntry 'D' "$R4" "$R5"
|
||||
!else
|
||||
!insertmacro __InstallLib_Helper_AddRegToolEntry 'DX' "$R4" "$R5"
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
!insertmacro __InstallLib_Helper_AddRegToolEntry 'T' "$R4" "$R5"
|
||||
!endif
|
||||
|
||||
!ifdef INSTALLLIB_LIBTYPE_REGEXE
|
||||
!insertmacro __InstallLib_Helper_AddRegToolEntry 'E' "$R4" "$R5"
|
||||
!endif
|
||||
|
||||
Return
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;End label
|
||||
|
||||
"installlib.end_${INSTALLLIB_UNIQUE}:"
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
${EnableX64FSRedirection}
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Undefine
|
||||
|
||||
!undef INSTALLLIB_UNIQUE
|
||||
|
||||
!undef ${INSTALLLIB_LIBTYPE_SET}
|
||||
!undef INSTALLLIB_LIBTYPE_SET
|
||||
!undef ${INSTALLLIB_SHARED_SET}
|
||||
!undef INSTALLLIB_SHARED_SET
|
||||
!undef ${INSTALLLIB_INSTALL_SET}
|
||||
!undef INSTALLLIB_INSTALL_SET
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
### Uninstall library
|
||||
!macro UnInstallLib libtype shared uninstall file
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
|
||||
;------------------------
|
||||
;Define
|
||||
|
||||
!define UNINSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
|
||||
|
||||
!define UNINSTALLLIB_LIBTYPE_${libtype}
|
||||
!define UNINSTALLLIB_LIBTYPE_SET UNINSTALLLIB_LIBTYPE_${libtype}
|
||||
!define UNINSTALLLIB_SHARED_${shared}
|
||||
!define UNINSTALLLIB_SHARED_SET UNINSTALLLIB_SHARED_${shared}
|
||||
!define UNINSTALLLIB_UNINSTALL_${uninstall}
|
||||
!define UNINSTALLLIB_UNINSTALL_SET UNINSTALLLIB_UNINSTALL_${uninstall}
|
||||
|
||||
;------------------------
|
||||
;Validate
|
||||
|
||||
!ifndef UNINSTALLLIB_LIBTYPE_DLL & UNINSTALLLIB_LIBTYPE_REGDLL & UNINSTALLLIB_LIBTYPE_TLB & \
|
||||
UNINSTALLLIB_LIBTYPE_REGDLLTLB & UNINSTALLLIB_LIBTYPE_REGEXE
|
||||
!error "UnInstallLib: Incorrect setting for parameter: libtype"
|
||||
!endif
|
||||
|
||||
!ifndef UNINSTALLLIB_SHARED_NOTSHARED & UNINSTALLLIB_SHARED_SHARED
|
||||
!error "UnInstallLib: Incorrect setting for parameter: shared"
|
||||
!endif
|
||||
|
||||
!ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE & UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED & \
|
||||
UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED & UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED & \
|
||||
UNINSTALLLIB_UNINSTALL_NOREBOOT_NOTPROTECTED
|
||||
!error "UnInstallLib: Incorrect setting for parameter: uninstall"
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;x64 settings
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
${DisableX64FSRedirection}
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Copy the parameters used on run-time to a variable
|
||||
;This allows the usage of variables as parameter
|
||||
|
||||
StrCpy $R1 "${file}"
|
||||
|
||||
;------------------------
|
||||
;Shared library count
|
||||
|
||||
!ifdef UNINSTALLLIB_SHARED_SHARED
|
||||
|
||||
!define UNINSTALLLIB_DONE_LABEL
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
SetRegView 64
|
||||
|
||||
!endif
|
||||
|
||||
ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
|
||||
StrCmp $R0 "" "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
|
||||
|
||||
IntOp $R0 $R0 - 1
|
||||
IntCmp $R0 0 "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" \
|
||||
"uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}"
|
||||
|
||||
"uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}:"
|
||||
DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
|
||||
!ifndef UNINSTALLLIB_SHARED_SHAREDNOREMOVE
|
||||
Goto "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
|
||||
!endif
|
||||
|
||||
"uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}:"
|
||||
WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
SetRegView lastused
|
||||
|
||||
!endif
|
||||
|
||||
Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
|
||||
|
||||
"uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}:"
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
SetRegView lastused
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Remove
|
||||
|
||||
!ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE
|
||||
|
||||
;------------------------
|
||||
;Check Windows File Protection
|
||||
|
||||
!ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED
|
||||
|
||||
!ifndef UNINSTALLLIB_DONE_LABEL
|
||||
|
||||
!define UNINSTALLLIB_DONE_LABEL
|
||||
|
||||
!endif
|
||||
|
||||
System::Call "sfc::SfcIsFileProtected(i 0, w $R1) i.R0"
|
||||
|
||||
StrCmp $R0 "error" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
|
||||
StrCmp $R0 "0" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
|
||||
|
||||
Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
|
||||
|
||||
"uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Unregister
|
||||
|
||||
!ifdef UNINSTALLLIB_LIBTYPE_REGDLL | UNINSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
!ifndef LIBRARY_X64
|
||||
|
||||
UnRegDLL $R1
|
||||
|
||||
!else
|
||||
|
||||
ExecWait '"$SYSDIR\regsvr32.exe" /s /u "$R1"'
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef UNINSTALLLIB_LIBTYPE_REGEXE
|
||||
|
||||
ExecWait '"$R1" /unregserver'
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef UNINSTALLLIB_LIBTYPE_TLB | UNINSTALLLIB_LIBTYPE_REGDLLTLB
|
||||
|
||||
TypeLib::UnRegister $R1
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef LIBRARY_SHELL_EXTENSION
|
||||
|
||||
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef LIBRARY_COM
|
||||
|
||||
System::Call 'Ole32::CoFreeUnusedLibraries()'
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Delete
|
||||
|
||||
Delete $R1
|
||||
|
||||
!ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED
|
||||
|
||||
${If} ${FileExists} $R1
|
||||
# File is in use, can't just delete.
|
||||
# Move file to another location before using Delete /REBOOTOK. This way, if
|
||||
# the user installs a new version of the DLL, it won't be deleted after
|
||||
# reboot. See bug #1097642 for more information on this.
|
||||
|
||||
# Try moving to $TEMP.
|
||||
GetTempFileName $R0
|
||||
Delete $R0
|
||||
Rename $R1 $R0
|
||||
|
||||
${If} ${FileExists} $R1
|
||||
# Still here, delete temporary file, in case the file was copied
|
||||
# and not deleted. This happens when moving from network drives,
|
||||
# for example.
|
||||
Delete $R0
|
||||
|
||||
# Try moving to directory containing the file.
|
||||
!insertmacro __InstallLib_Helper_GetParent $R1 $R0
|
||||
GetTempFileName $R0 $R0
|
||||
Delete $R0
|
||||
Rename $R1 $R0
|
||||
|
||||
${If} ${FileExists} $R1
|
||||
# Still here, delete temporary file.
|
||||
Delete $R0
|
||||
|
||||
# Give up moving, simply Delete /REBOOTOK the file.
|
||||
StrCpy $R0 $R1
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
# Delete the moved file.
|
||||
Delete /REBOOTOK $R0
|
||||
${EndIf}
|
||||
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Done
|
||||
|
||||
!ifdef UNINSTALLLIB_DONE_LABEL
|
||||
|
||||
!undef UNINSTALLLIB_DONE_LABEL
|
||||
|
||||
"uninstalllib.done_${UNINSTALLLIB_UNIQUE}:"
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef LIBRARY_X64
|
||||
|
||||
${EnableX64FSRedirection}
|
||||
|
||||
!endif
|
||||
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
;------------------------
|
||||
;Undefine
|
||||
|
||||
!undef UNINSTALLLIB_UNIQUE
|
||||
|
||||
!undef ${UNINSTALLLIB_LIBTYPE_SET}
|
||||
!undef UNINSTALLLIB_LIBTYPE_SET
|
||||
!undef ${UNINSTALLLIB_SHARED_SET}
|
||||
!undef UNINSTALLLIB_SHARED_SET
|
||||
!undef ${UNINSTALLLIB_UNINSTALL_SET}
|
||||
!undef UNINSTALLLIB_UNINSTALL_SET
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!endif
|
||||
|
||||
!verbose pop
|
@ -1,792 +0,0 @@
|
||||
; NSIS LOGIC LIBRARY - LogicLib.nsh
|
||||
; Version 2.6 - 08/12/2007
|
||||
; By dselkirk@hotmail.com
|
||||
; and eccles@users.sf.net
|
||||
; with IfNot support added by Message
|
||||
;
|
||||
; Questions/Comments -
|
||||
; See http://forums.winamp.com/showthread.php?s=&postid=1116241
|
||||
;
|
||||
; Description:
|
||||
; Provides the use of various logic statements within NSIS.
|
||||
;
|
||||
; Usage:
|
||||
; The following "statements" are available:
|
||||
; If|IfNot|Unless..{ElseIf|ElseIfNot|ElseUnless}..[Else]..EndIf|EndUnless
|
||||
; - Conditionally executes a block of statements, depending on the value
|
||||
; of an expression. IfNot and Unless are equivalent and
|
||||
; interchangeable, as are ElseIfNot and ElseUnless.
|
||||
; AndIf|AndIfNot|AndUnless|OrIf|OrIfNot|OrUnless
|
||||
; - Adds any number of extra conditions to If, IfNot, Unless, ElseIf,
|
||||
; ElseIfNot and ElseUnless statements.
|
||||
; IfThen|IfNotThen..|..|
|
||||
; - Conditionally executes an inline statement, depending on the value
|
||||
; of an expression.
|
||||
; IfCmd..||..|
|
||||
; - Conditionally executes an inline statement, depending on a true
|
||||
; value of the provided NSIS function.
|
||||
; Select..{Case[2|3|4|5]}..[CaseElse|Default]..EndSelect
|
||||
; - Executes one of several blocks of statements, depending on the value
|
||||
; of an expression.
|
||||
; Switch..{Case|CaseElse|Default}..EndSwitch
|
||||
; - Jumps to one of several labels, depending on the value of an
|
||||
; expression.
|
||||
; Do[While|Until]..{ExitDo|Continue|Break}..Loop[While|Until]
|
||||
; - Repeats a block of statements until stopped, or depending on the
|
||||
; value of an expression.
|
||||
; While..{ExitWhile|Continue|Break}..EndWhile
|
||||
; - An alias for DoWhile..Loop (for backwards-compatibility)
|
||||
; For[Each]..{ExitFor|Continue|Break}..Next
|
||||
; - Repeats a block of statements varying the value of a variable.
|
||||
;
|
||||
; The following "expressions" are available:
|
||||
; Standard (built-in) string tests (which are case-insensitive):
|
||||
; a == b; a != b
|
||||
; Additional case-insensitive string tests (using System.dll):
|
||||
; a S< b; a S>= b; a S> b; a S<= b
|
||||
; Case-sensitive string tests:
|
||||
; a S== b; a S!= b
|
||||
; Standard (built-in) signed integer tests:
|
||||
; a = b; a <> b; a < b; a >= b; a > b; a <= b
|
||||
; Standard (built-in) unsigned integer tests:
|
||||
; a U< b; a U>= b; a U> b; a U<= b
|
||||
; 64-bit integer tests (using System.dll):
|
||||
; a L= b; a L<> b; a L< b; a L>= b; a L> b; a L<= b
|
||||
; Built-in NSIS flag tests:
|
||||
; ${Abort}; ${Errors}; ${RebootFlag}; ${Silent}
|
||||
; Built-in NSIS other tests:
|
||||
; ${FileExists} a
|
||||
; Any conditional NSIS instruction test:
|
||||
; ${Cmd} a
|
||||
; Section flag tests:
|
||||
; ${SectionIsSelected} a; ${SectionIsSectionGroup} a;
|
||||
; ${SectionIsSectionGroupEnd} a; ${SectionIsBold} a;
|
||||
; ${SectionIsReadOnly} a; ${SectionIsExpanded} a;
|
||||
; ${SectionIsPartiallySelected} a
|
||||
;
|
||||
; Examples:
|
||||
; See LogicLib.nsi in the Examples folder for lots of example usage.
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
!ifndef LOGICLIB_VERBOSITY
|
||||
!define LOGICLIB_VERBOSITY 3
|
||||
!endif
|
||||
!define _LOGICLIB_VERBOSITY ${LOGICLIB_VERBOSITY}
|
||||
!undef LOGICLIB_VERBOSITY
|
||||
!verbose ${_LOGICLIB_VERBOSITY}
|
||||
|
||||
!ifndef LOGICLIB
|
||||
!define LOGICLIB
|
||||
!define | "'"
|
||||
!define || "' '"
|
||||
!define LOGICLIB_COUNTER 0
|
||||
|
||||
!include Sections.nsh
|
||||
|
||||
!macro _LOGICLIB_TEMP
|
||||
!ifndef _LOGICLIB_TEMP
|
||||
!define _LOGICLIB_TEMP
|
||||
Var /GLOBAL _LOGICLIB_TEMP ; Temporary variable to aid the more elaborate logic tests
|
||||
!endif
|
||||
!macroend
|
||||
|
||||
!macro _IncreaseCounter
|
||||
!define _LOGICLIB_COUNTER ${LOGICLIB_COUNTER}
|
||||
!undef LOGICLIB_COUNTER
|
||||
!define /math LOGICLIB_COUNTER ${_LOGICLIB_COUNTER} + 1
|
||||
!undef _LOGICLIB_COUNTER
|
||||
!macroend
|
||||
|
||||
!macro _PushLogic
|
||||
!insertmacro _PushScope Logic _LogicLib_Label_${LOGICLIB_COUNTER}
|
||||
!insertmacro _IncreaseCounter
|
||||
!macroend
|
||||
|
||||
!macro _PopLogic
|
||||
!insertmacro _PopScope Logic
|
||||
!macroend
|
||||
|
||||
!macro _PushScope Type label
|
||||
!ifdef _${Type} ; If we already have a statement
|
||||
!define _Cur${Type} ${_${Type}}
|
||||
!undef _${Type}
|
||||
!define _${Type} ${label}
|
||||
!define ${_${Type}}Prev${Type} ${_Cur${Type}} ; Save the current logic
|
||||
!undef _Cur${Type}
|
||||
!else
|
||||
!define _${Type} ${label} ; Initialise for first statement
|
||||
!endif
|
||||
!macroend
|
||||
|
||||
!macro _PopScope Type
|
||||
!ifndef _${Type}
|
||||
!error "Cannot use _Pop${Type} without a preceding _Push${Type}"
|
||||
!endif
|
||||
!ifdef ${_${Type}}Prev${Type} ; If a previous statment was active then restore it
|
||||
!define _Cur${Type} ${_${Type}}
|
||||
!undef _${Type}
|
||||
!define _${Type} ${${_Cur${Type}}Prev${Type}}
|
||||
!undef ${_Cur${Type}}Prev${Type}
|
||||
!undef _Cur${Type}
|
||||
!else
|
||||
!undef _${Type}
|
||||
!endif
|
||||
!macroend
|
||||
|
||||
; String tests
|
||||
!macro _== _a _b _t _f
|
||||
StrCmp `${_a}` `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _!= _a _b _t _f
|
||||
!insertmacro _== `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
; Case-sensitive string tests
|
||||
!macro _S== _a _b _t _f
|
||||
StrCmpS `${_a}` `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _S!= _a _b _t _f
|
||||
!insertmacro _S== `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
; Extra string tests (cannot do these case-sensitively - I tried and lstrcmp still ignored the case)
|
||||
!macro _StrCmpI _a _b _e _l _m
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
System::Call `kernel32::lstrcmpiA(ts, ts) i.s` `${_a}` `${_b}`
|
||||
Pop $_LOGICLIB_TEMP
|
||||
IntCmp $_LOGICLIB_TEMP 0 `${_e}` `${_l}` `${_m}`
|
||||
!macroend
|
||||
|
||||
!macro _S< _a _b _t _f
|
||||
!insertmacro _StrCmpI `${_a}` `${_b}` `${_f}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _S>= _a _b _t _f
|
||||
!insertmacro _S< `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _S> _a _b _t _f
|
||||
!insertmacro _StrCmpI `${_a}` `${_b}` `${_f}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _S<= _a _b _t _f
|
||||
!insertmacro _S> `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
; Integer tests
|
||||
!macro _= _a _b _t _f
|
||||
IntCmp `${_a}` `${_b}` `${_t}` `${_f}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _<> _a _b _t _f
|
||||
!insertmacro _= `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _< _a _b _t _f
|
||||
IntCmp `${_a}` `${_b}` `${_f}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _>= _a _b _t _f
|
||||
!insertmacro _< `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _> _a _b _t _f
|
||||
IntCmp `${_a}` `${_b}` `${_f}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _<= _a _b _t _f
|
||||
!insertmacro _> `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
; Unsigned integer tests (NB: no need for extra equality tests)
|
||||
!macro _U< _a _b _t _f
|
||||
IntCmpU `${_a}` `${_b}` `${_f}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _U>= _a _b _t _f
|
||||
!insertmacro _U< `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _U> _a _b _t _f
|
||||
IntCmpU `${_a}` `${_b}` `${_f}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _U<= _a _b _t _f
|
||||
!insertmacro _U> `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
; Int64 tests
|
||||
!macro _Int64Cmp _a _o _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
System::Int64Op `${_a}` `${_o}` `${_b}`
|
||||
Pop $_LOGICLIB_TEMP
|
||||
!insertmacro _= $_LOGICLIB_TEMP 0 `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _L= _a _b _t _f
|
||||
!insertmacro _Int64Cmp `${_a}` = `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _L<> _a _b _t _f
|
||||
!insertmacro _L= `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _L< _a _b _t _f
|
||||
!insertmacro _Int64Cmp `${_a}` < `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _L>= _a _b _t _f
|
||||
!insertmacro _L< `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
!macro _L> _a _b _t _f
|
||||
!insertmacro _Int64Cmp `${_a}` > `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro _L<= _a _b _t _f
|
||||
!insertmacro _L> `${_a}` `${_b}` `${_f}` `${_t}`
|
||||
!macroend
|
||||
|
||||
; Flag tests
|
||||
!macro _Abort _a _b _t _f
|
||||
IfAbort `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define Abort `"" Abort ""`
|
||||
|
||||
!macro _Errors _a _b _t _f
|
||||
IfErrors `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define Errors `"" Errors ""`
|
||||
|
||||
!macro _FileExists _a _b _t _f
|
||||
IfFileExists `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define FileExists `"" FileExists`
|
||||
|
||||
!macro _RebootFlag _a _b _t _f
|
||||
IfRebootFlag `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define RebootFlag `"" RebootFlag ""`
|
||||
|
||||
!macro _Silent _a _b _t _f
|
||||
IfSilent `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define Silent `"" Silent ""`
|
||||
|
||||
; "Any instruction" test
|
||||
!macro _Cmd _a _b _t _f
|
||||
!define _t=${_t}
|
||||
!ifdef _t= ; If no true label then make one
|
||||
!define __t _LogicLib_Label_${LOGICLIB_COUNTER}
|
||||
!insertmacro _IncreaseCounter
|
||||
!else
|
||||
!define __t ${_t}
|
||||
!endif
|
||||
${_b} ${__t}
|
||||
!define _f=${_f}
|
||||
!ifndef _f= ; If a false label then go there
|
||||
Goto ${_f}
|
||||
!endif
|
||||
!undef _f=${_f}
|
||||
!ifdef _t= ; If we made our own true label then place it
|
||||
${__t}:
|
||||
!endif
|
||||
!undef __t
|
||||
!undef _t=${_t}
|
||||
!macroend
|
||||
!define Cmd `"" Cmd`
|
||||
|
||||
; Section flag test
|
||||
!macro _SectionFlagIsSet _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
SectionGetFlags `${_b}` $_LOGICLIB_TEMP
|
||||
IntOp $_LOGICLIB_TEMP $_LOGICLIB_TEMP & `${_a}`
|
||||
!insertmacro _= $_LOGICLIB_TEMP `${_a}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define SectionIsSelected `${SF_SELECTED} SectionFlagIsSet`
|
||||
!define SectionIsSubSection `${SF_SUBSEC} SectionFlagIsSet`
|
||||
!define SectionIsSubSectionEnd `${SF_SUBSECEND} SectionFlagIsSet`
|
||||
!define SectionIsSectionGroup `${SF_SECGRP} SectionFlagIsSet`
|
||||
!define SectionIsSectionGroupEnd `${SF_SECGRPEND} SectionFlagIsSet`
|
||||
!define SectionIsBold `${SF_BOLD} SectionFlagIsSet`
|
||||
!define SectionIsReadOnly `${SF_RO} SectionFlagIsSet`
|
||||
!define SectionIsExpanded `${SF_EXPAND} SectionFlagIsSet`
|
||||
!define SectionIsPartiallySelected `${SF_PSELECTED} SectionFlagIsSet`
|
||||
|
||||
!define IfCmd `!insertmacro _IfThen "" Cmd ${|}`
|
||||
|
||||
!macro _If _c _a _o _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!insertmacro _PushLogic
|
||||
!define ${_Logic}If
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the Else
|
||||
!insertmacro _IncreaseCounter
|
||||
!define _c=${_c}
|
||||
!ifdef _c=true ; If is true
|
||||
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
|
||||
!else ; If condition is false
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
|
||||
!endif
|
||||
!undef _c=${_c}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define If `!insertmacro _If true`
|
||||
!define Unless `!insertmacro _If false`
|
||||
!define IfNot `!insertmacro _If false`
|
||||
|
||||
!macro _And _c _a _o _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}If
|
||||
!error "Cannot use And without a preceding If or IfNot/Unless"
|
||||
!endif
|
||||
!ifndef ${_Logic}Else
|
||||
!error "Cannot use And following an Else"
|
||||
!endif
|
||||
!define _c=${_c}
|
||||
!ifdef _c=true ; If is true
|
||||
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
|
||||
!else ; If condition is false
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
|
||||
!endif
|
||||
!undef _c=${_c}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define AndIf `!insertmacro _And true`
|
||||
!define AndUnless `!insertmacro _And false`
|
||||
!define AndIfNot `!insertmacro _And false`
|
||||
|
||||
!macro _Or _c _a _o _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}If
|
||||
!error "Cannot use Or without a preceding If or IfNot/Unless"
|
||||
!endif
|
||||
!ifndef ${_Logic}Else
|
||||
!error "Cannot use Or following an Else"
|
||||
!endif
|
||||
!define _label _LogicLib_Label_${LOGICLIB_COUNTER} ; Skip this test as we already
|
||||
!insertmacro _IncreaseCounter
|
||||
Goto ${_label} ; have a successful result
|
||||
${${_Logic}Else}: ; Place the Else label
|
||||
!undef ${_Logic}Else ; and remove it
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new If
|
||||
!insertmacro _IncreaseCounter
|
||||
!define _c=${_c}
|
||||
!ifdef _c=true ; If is true
|
||||
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
|
||||
!else ; If condition is false
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
|
||||
!endif
|
||||
!undef _c=${_c}
|
||||
${_label}:
|
||||
!undef _label
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define OrIf `!insertmacro _Or true`
|
||||
!define OrUnless `!insertmacro _Or false`
|
||||
!define OrIfNot `!insertmacro _Or false`
|
||||
|
||||
!macro _Else
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}If
|
||||
!error "Cannot use Else without a preceding If or IfNot/Unless"
|
||||
!endif
|
||||
!ifndef ${_Logic}Else
|
||||
!error "Cannot use Else following an Else"
|
||||
!endif
|
||||
!ifndef ${_Logic}EndIf ; First Else for this If?
|
||||
!define ${_Logic}EndIf _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the EndIf
|
||||
!insertmacro _IncreaseCounter
|
||||
!endif
|
||||
Goto ${${_Logic}EndIf} ; Go to the EndIf
|
||||
${${_Logic}Else}: ; Place the Else label
|
||||
!undef ${_Logic}Else ; and remove it
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Else `!insertmacro _Else`
|
||||
|
||||
!macro _ElseIf _c _a _o _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${Else} ; Perform the Else
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new If
|
||||
!insertmacro _IncreaseCounter
|
||||
!define _c=${_c}
|
||||
!ifdef _c=true ; If is true
|
||||
!insertmacro _${_o} `${_a}` `${_b}` "" ${${_Logic}Else}
|
||||
!else ; If condition is false
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}Else} ""
|
||||
!endif
|
||||
!undef _c=${_c}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define ElseIf `!insertmacro _ElseIf true`
|
||||
!define ElseUnless `!insertmacro _ElseIf false`
|
||||
!define ElseIfNot `!insertmacro _ElseIf false`
|
||||
|
||||
!macro _EndIf _n
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}If
|
||||
!error "Cannot use End${_n} without a preceding If or IfNot/Unless"
|
||||
!endif
|
||||
!ifdef ${_Logic}Else
|
||||
${${_Logic}Else}: ; Place the Else label
|
||||
!undef ${_Logic}Else ; and remove it
|
||||
!endif
|
||||
!ifdef ${_Logic}EndIf
|
||||
${${_Logic}EndIf}: ; Place the EndIf
|
||||
!undef ${_Logic}EndIf ; and remove it
|
||||
!endif
|
||||
!undef ${_Logic}If
|
||||
!insertmacro _PopLogic
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define EndIf `!insertmacro _EndIf If`
|
||||
!define EndUnless `!insertmacro _EndIf Unless`
|
||||
|
||||
!macro _IfThen _a _o _b _t
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${If} `${_a}` `${_o}` `${_b}`
|
||||
${_t}
|
||||
${EndIf}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define IfThen `!insertmacro _IfThen`
|
||||
|
||||
!macro _IfNotThen _a _o _b _t
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${IfNot} `${_a}` `${_o}` `${_b}`
|
||||
${_t}
|
||||
${EndIf}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define IfNotThen `!insertmacro _IfNotThen`
|
||||
|
||||
!macro _ForEach _v _f _t _o _s
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
StrCpy "${_v}" "${_f}" ; Assign the initial value
|
||||
Goto +2 ; Skip the loop expression for the first iteration
|
||||
!define _DoLoopExpression `IntOp "${_v}" "${_v}" "${_o}" "${_s}"` ; Define the loop expression
|
||||
!define _o=${_o}
|
||||
!ifdef _o=+ ; Check the loop expression operator
|
||||
!define __o > ; to determine the correct loop condition
|
||||
!else ifdef _o=-
|
||||
!define __o <
|
||||
!else
|
||||
!error "Unsupported ForEach step operator (must be + or -)"
|
||||
!endif
|
||||
!undef _o=${_o}
|
||||
!insertmacro _Do For false `${_v}` `${__o}` `${_t}` ; Let Do do the rest
|
||||
!undef __o
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define ForEach `!insertmacro _ForEach`
|
||||
|
||||
!macro _For _v _f _t
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${ForEach} `${_v}` `${_f}` `${_t}` + 1 ; Pass on to ForEach
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define For `!insertmacro _For`
|
||||
|
||||
!define ExitFor `!insertmacro _Goto ExitFor For`
|
||||
|
||||
!define Next `!insertmacro _Loop For Next "" "" "" ""`
|
||||
|
||||
!define While `!insertmacro _Do While true`
|
||||
|
||||
!define ExitWhile `!insertmacro _Goto ExitWhile While`
|
||||
|
||||
!define EndWhile `!insertmacro _Loop While EndWhile "" "" "" ""`
|
||||
|
||||
!macro _Do _n _c _a _o _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!insertmacro _PushLogic
|
||||
!define ${_Logic}${_n} _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the start of the loop
|
||||
!insertmacro _IncreaseCounter
|
||||
${${_Logic}${_n}}:
|
||||
!insertmacro _PushScope Exit${_n} _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the end of the loop
|
||||
!insertmacro _IncreaseCounter
|
||||
!insertmacro _PushScope Break ${_Exit${_n}} ; Break goes to the end of the loop
|
||||
!ifdef _DoLoopExpression
|
||||
${_DoLoopExpression} ; Special extra parameter for inserting code
|
||||
!undef _DoLoopExpression ; between the Continue label and the loop condition
|
||||
!endif
|
||||
!define _c=${_c}
|
||||
!ifdef _c= ; No starting condition
|
||||
!insertmacro _PushScope Continue _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for Continue at the end of the loop
|
||||
!insertmacro _IncreaseCounter
|
||||
!else
|
||||
!insertmacro _PushScope Continue ${${_Logic}${_n}} ; Continue goes to the start of the loop
|
||||
!ifdef _c=true ; If is true
|
||||
!insertmacro _${_o} `${_a}` `${_b}` "" ${_Exit${_n}}
|
||||
!else ; If condition is false
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${_Exit${_n}} ""
|
||||
!endif
|
||||
!endif
|
||||
!undef _c=${_c}
|
||||
!define ${_Logic}Condition ${_c} ; Remember the condition used
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Do `!insertmacro _Do Do "" "" "" ""`
|
||||
!define DoWhile `!insertmacro _Do Do true`
|
||||
!define DoUntil `!insertmacro _Do Do false`
|
||||
|
||||
!macro _Goto _n _s
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _${_n}
|
||||
!error "Cannot use ${_n} without a preceding ${_s}"
|
||||
!endif
|
||||
Goto ${_${_n}}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define ExitDo `!insertmacro _Goto ExitDo Do`
|
||||
|
||||
!macro _Loop _n _e _c _a _o _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}${_n}
|
||||
!error "Cannot use ${_e} without a preceding ${_n}"
|
||||
!endif
|
||||
!define _c=${${_Logic}Condition}
|
||||
!ifdef _c= ; If Do had no condition place the Continue label
|
||||
${_Continue}:
|
||||
!endif
|
||||
!undef _c=${${_Logic}Condition}
|
||||
!define _c=${_c}
|
||||
!ifdef _c= ; No ending condition
|
||||
Goto ${${_Logic}${_n}}
|
||||
!else ifdef _c=true ; If condition is true
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${${_Logic}${_n}} ${_Exit${_n}}
|
||||
!else ; If condition is false
|
||||
!insertmacro _${_o} `${_a}` `${_b}` ${_Exit${_n}} ${${_Logic}${_n}}
|
||||
!endif
|
||||
!undef _c=${_c}
|
||||
Goto ${_Continue} ; Just to ensure it is referenced at least once
|
||||
Goto ${_Exit${_n}} ; Just to ensure it is referenced at least once
|
||||
${_Exit${_n}}: ; Place the loop exit point
|
||||
!undef ${_Logic}Condition
|
||||
!insertmacro _PopScope Continue
|
||||
!insertmacro _PopScope Break
|
||||
!insertmacro _PopScope Exit${_n}
|
||||
!undef ${_Logic}${_n}
|
||||
!insertmacro _PopLogic
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Loop `!insertmacro _Loop Do Loop "" "" "" ""`
|
||||
!define LoopWhile `!insertmacro _Loop Do LoopWhile true`
|
||||
!define LoopUntil `!insertmacro _Loop Do LoopUntil false`
|
||||
|
||||
!define Continue `!insertmacro _Goto Continue "For or Do or While"`
|
||||
!define Break `!insertmacro _Goto Break "For or Do or While"`
|
||||
|
||||
!macro _Select _a
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!insertmacro _PushLogic
|
||||
!define ${_Logic}Select `${_a}` ; Remember the left hand side of the comparison
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Select `!insertmacro _Select`
|
||||
|
||||
!macro _Select_CaseElse
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}Select
|
||||
!error "Cannot use Case without a preceding Select"
|
||||
!endif
|
||||
!ifdef ${_Logic}EndSelect ; This is set only after the first case
|
||||
!ifndef ${_Logic}Else
|
||||
!error "Cannot use Case following a CaseElse"
|
||||
!endif
|
||||
Goto ${${_Logic}EndSelect} ; Go to the EndSelect
|
||||
${${_Logic}Else}: ; Place the Else label
|
||||
!undef ${_Logic}Else ; and remove it
|
||||
!else
|
||||
!define ${_Logic}EndSelect _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the EndSelect
|
||||
!insertmacro _IncreaseCounter
|
||||
!endif
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define CaseElse `!insertmacro _CaseElse`
|
||||
!define Case_Else `!insertmacro _CaseElse` ; Compatibility with 2.2 and earlier
|
||||
!define Default `!insertmacro _CaseElse` ; For the C-minded
|
||||
|
||||
!macro _Select_Case _a
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${CaseElse} ; Perform the CaseElse
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
|
||||
!insertmacro _IncreaseCounter
|
||||
!insertmacro _== `${${_Logic}Select}` `${_a}` "" ${${_Logic}Else}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Case `!insertmacro _Case`
|
||||
|
||||
!macro _Case2 _a _b
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${CaseElse} ; Perform the CaseElse
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
|
||||
!insertmacro _IncreaseCounter
|
||||
!insertmacro _== `${${_Logic}Select}` `${_a}` +2 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_b}` "" ${${_Logic}Else}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Case2 `!insertmacro _Case2`
|
||||
|
||||
!macro _Case3 _a _b _c
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${CaseElse} ; Perform the CaseElse
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
|
||||
!insertmacro _IncreaseCounter
|
||||
!insertmacro _== `${${_Logic}Select}` `${_a}` +3 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_b}` +2 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_c}` "" ${${_Logic}Else}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Case3 `!insertmacro _Case3`
|
||||
|
||||
!macro _Case4 _a _b _c _d
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${CaseElse} ; Perform the CaseElse
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
|
||||
!insertmacro _IncreaseCounter
|
||||
!insertmacro _== `${${_Logic}Select}` `${_a}` +4 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_b}` +3 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_c}` +2 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_d}` "" ${${_Logic}Else}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Case4 `!insertmacro _Case4`
|
||||
|
||||
!macro _Case5 _a _b _c _d _e
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
${CaseElse} ; Perform the CaseElse
|
||||
!define ${_Logic}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the next Else and perform the new Case
|
||||
!insertmacro _IncreaseCounter
|
||||
!insertmacro _== `${${_Logic}Select}` `${_a}` +5 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_b}` +4 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_c}` +3 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_d}` +2 ""
|
||||
!insertmacro _== `${${_Logic}Select}` `${_e}` "" ${${_Logic}Else}
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Case5 `!insertmacro _Case5`
|
||||
|
||||
!macro _EndSelect
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}Select
|
||||
!error "Cannot use EndSelect without a preceding Select"
|
||||
!endif
|
||||
!ifdef ${_Logic}Else
|
||||
${${_Logic}Else}: ; Place the Else label
|
||||
!undef ${_Logic}Else ; and remove it
|
||||
!endif
|
||||
!ifdef ${_Logic}EndSelect ; This won't be set if there weren't any cases
|
||||
${${_Logic}EndSelect}: ; Place the EndSelect
|
||||
!undef ${_Logic}EndSelect ; and remove it
|
||||
!endif
|
||||
!undef ${_Logic}Select
|
||||
!insertmacro _PopLogic
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define EndSelect `!insertmacro _EndSelect`
|
||||
|
||||
!macro _Switch _a
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!insertmacro _PushLogic
|
||||
!insertmacro _PushScope Switch ${_Logic} ; Keep a separate stack for switch data
|
||||
!insertmacro _PushScope Break _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a lable for beyond the end of the switch
|
||||
!insertmacro _IncreaseCounter
|
||||
!define ${_Switch}Var `${_a}` ; Remember the left hand side of the comparison
|
||||
!tempfile ${_Switch}Tmp ; Create a temporary file
|
||||
!define ${_Logic}Switch _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the end of the switch
|
||||
!insertmacro _IncreaseCounter
|
||||
Goto ${${_Logic}Switch} ; and go there
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define Switch `!insertmacro _Switch`
|
||||
|
||||
!macro _Case _a
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifdef _Logic & ${_Logic}Select ; Check for an active Select
|
||||
!insertmacro _Select_Case `${_a}`
|
||||
!else ifndef _Switch ; If not then check for an active Switch
|
||||
!error "Cannot use Case without a preceding Select or Switch"
|
||||
!else
|
||||
!define _label _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for this case,
|
||||
!insertmacro _IncreaseCounter
|
||||
${_label}: ; place it and add it's check to the temp file
|
||||
!appendfile "${${_Switch}Tmp}" `!insertmacro _== $\`${${_Switch}Var}$\` $\`${_a}$\` ${_label} ""$\n`
|
||||
!undef _label
|
||||
!endif
|
||||
!verbose pop
|
||||
!macroend
|
||||
|
||||
!macro _CaseElse
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifdef _Logic & ${_Logic}Select ; Check for an active Select
|
||||
!insertmacro _Select_CaseElse
|
||||
!else ifndef _Switch ; If not then check for an active Switch
|
||||
!error "Cannot use Case without a preceding Select or Switch"
|
||||
!else ifdef ${_Switch}Else ; Already had a default case?
|
||||
!error "Cannot use CaseElse following a CaseElse"
|
||||
!else
|
||||
!define ${_Switch}Else _LogicLib_Label_${LOGICLIB_COUNTER} ; Get a label for the default case,
|
||||
!insertmacro _IncreaseCounter
|
||||
${${_Switch}Else}: ; and place it
|
||||
!endif
|
||||
!verbose pop
|
||||
!macroend
|
||||
|
||||
!macro _EndSwitch
|
||||
!verbose push
|
||||
!verbose ${LOGICLIB_VERBOSITY}
|
||||
!ifndef _Logic | ${_Logic}Switch
|
||||
!error "Cannot use EndSwitch without a preceding Switch"
|
||||
!endif
|
||||
Goto ${_Break} ; Skip the jump table
|
||||
${${_Logic}Switch}: ; Place the end of the switch
|
||||
!undef ${_Logic}Switch
|
||||
!include "${${_Switch}Tmp}" ; Include the jump table
|
||||
!delfile "${${_Switch}Tmp}" ; and clear it up
|
||||
!ifdef ${_Switch}Else ; Was there a default case?
|
||||
Goto ${${_Switch}Else} ; then go there if all else fails
|
||||
!undef ${_Switch}Else
|
||||
!endif
|
||||
!undef ${_Switch}Tmp
|
||||
!undef ${_Switch}Var
|
||||
${_Break}: ; Place the break label
|
||||
!insertmacro _PopScope Break
|
||||
!insertmacro _PopScope Switch
|
||||
!insertmacro _PopLogic
|
||||
!verbose pop
|
||||
!macroend
|
||||
!define EndSwitch `!insertmacro _EndSwitch`
|
||||
|
||||
!endif ; LOGICLIB
|
||||
!verbose 3
|
||||
!define LOGICLIB_VERBOSITY ${_LOGICLIB_VERBOSITY}
|
||||
!undef _LOGICLIB_VERBOSITY
|
||||
!verbose pop
|
@ -1 +0,0 @@
|
||||
!include "${NSISDIR}\Contrib\Modern UI\System.nsh"
|
@ -1 +0,0 @@
|
||||
!include "${NSISDIR}\Contrib\Modern UI 2\MUI2.nsh"
|
@ -1,526 +0,0 @@
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!include LogicLib.nsh
|
||||
!include Sections.nsh
|
||||
|
||||
!ifndef ___MEMENTO_NSH___
|
||||
!define ___MEMENTO_NSH___
|
||||
|
||||
#####################################
|
||||
### Memento ###
|
||||
#####################################
|
||||
|
||||
/*
|
||||
|
||||
Memento is a set of macros that allow installers to remember user selection
|
||||
across separate runs of the installer. Currently, it can remember the state
|
||||
of sections and mark new sections as bold. In the future, it'll integrate
|
||||
InstallOptions and maybe even the Modern UI.
|
||||
|
||||
A usage example can be found in `Examples\Memento.nsi`.
|
||||
|
||||
*/
|
||||
|
||||
#####################################
|
||||
### Usage Instructions ###
|
||||
#####################################
|
||||
|
||||
/*
|
||||
|
||||
1. Declare usage of Memento by including Memento.nsh at the top of the script.
|
||||
|
||||
!include Memento.nsh
|
||||
|
||||
2. Define MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY with the a registry key
|
||||
where sections' state should be saved.
|
||||
|
||||
!define MEMENTO_REGISTRY_ROOT HKLM
|
||||
!define MEMENTO_REGISTRY_KEY \
|
||||
Software\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram
|
||||
|
||||
3. Replace Section with ${MementoSection} and SectionEnd with ${MementoSectionEnd}
|
||||
for sections that whose state should be remembered by Memento.
|
||||
|
||||
For sections that should be unselected by default, use ${MementoSection}'s
|
||||
brother - ${MementoUnselectedSection}.
|
||||
|
||||
Sections that don't already have an identifier must be assigned one.
|
||||
|
||||
Section identifiers must stay the same across different versions of the
|
||||
installer or their state will be forgotten.
|
||||
|
||||
4. Use ${MementoSectionDone} after the last ${MementoSection}.
|
||||
|
||||
5. Add a call to ${MementoSectionRestore} to .onInit to restore the state
|
||||
of all sections from the registry.
|
||||
|
||||
Function .onInit
|
||||
|
||||
${MementoSectionRestore}
|
||||
|
||||
FunctionEnd
|
||||
|
||||
6. Add a call to ${MementoSectionSave} to .onInstSuccess to save the state
|
||||
of all sections to the registry.
|
||||
|
||||
Function .onInstSuccess
|
||||
|
||||
${MementoSectionSave}
|
||||
|
||||
FunctionEnd
|
||||
|
||||
7. Tattoo the location of the chosen registry key on your arm.
|
||||
|
||||
*/
|
||||
|
||||
#####################################
|
||||
### User API ###
|
||||
#####################################
|
||||
|
||||
;
|
||||
; ${MementoSection}
|
||||
;
|
||||
; Defines a section whose state is remembered by Memento.
|
||||
;
|
||||
; Usage is similar to Section.
|
||||
;
|
||||
; ${MementoSection} "name" "some_id"
|
||||
;
|
||||
|
||||
!define MementoSection "!insertmacro MementoSection"
|
||||
|
||||
;
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
; Ends a section previously opened using ${MementoSection}.
|
||||
;
|
||||
; Usage is similar to SectionEnd.
|
||||
;
|
||||
; ${MementoSection} "name" "some_id"
|
||||
; # some code...
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
|
||||
;
|
||||
; ${MementoUnselectedSection}
|
||||
;
|
||||
; Defines a section whose state is remembered by Memento and is
|
||||
; unselected by default.
|
||||
;
|
||||
; Usage is similar to Section with the /o switch.
|
||||
;
|
||||
; ${MementoUnselectedSection} "name" "some_id"
|
||||
;
|
||||
|
||||
!define MementoUnselectedSection "!insertmacro MementoUnselectedSection"
|
||||
|
||||
;
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
; Ends a section previously opened using ${MementoSection}.
|
||||
;
|
||||
; Usage is similar to SectionEnd.
|
||||
;
|
||||
; ${MementoSection} "name" "some_id"
|
||||
; # some code...
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
|
||||
!define MementoSectionEnd "!insertmacro MementoSectionEnd"
|
||||
|
||||
;
|
||||
; ${MementoSectionDone}
|
||||
;
|
||||
; Used after all ${MementoSection} have been set.
|
||||
;
|
||||
; ${MementoSection} "name1" "some_id1"
|
||||
; # some code...
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
; ${MementoSection} "name2" "some_id2"
|
||||
; # some code...
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
; ${MementoSection} "name3" "some_id3"
|
||||
; # some code...
|
||||
; ${MementoSectionEnd}
|
||||
;
|
||||
; ${MementoSectionDone}
|
||||
;
|
||||
|
||||
!define MementoSectionDone "!insertmacro MementoSectionDone"
|
||||
|
||||
;
|
||||
; ${MementoSectionRestore}
|
||||
;
|
||||
; Restores the state of all Memento sections from the registry.
|
||||
;
|
||||
; Commonly used in .onInit.
|
||||
;
|
||||
; Function .onInit
|
||||
;
|
||||
; ${MementoSectionRestore}
|
||||
;
|
||||
; FunctionEnd
|
||||
;
|
||||
|
||||
!define MementoSectionRestore "!insertmacro MementoSectionRestore"
|
||||
|
||||
;
|
||||
; ${MementoSectionSave}
|
||||
;
|
||||
; Saves the state of all Memento sections to the registry.
|
||||
;
|
||||
; Commonly used in .onInstSuccess.
|
||||
;
|
||||
; Function .onInstSuccess
|
||||
;
|
||||
; ${MementoSectionSave}
|
||||
;
|
||||
; FunctionEnd
|
||||
;
|
||||
|
||||
!define MementoSectionSave "!insertmacro MementoSectionSave"
|
||||
|
||||
|
||||
#####################################
|
||||
### Internal Defines ###
|
||||
#####################################
|
||||
|
||||
!define __MementoSectionIndex 1
|
||||
|
||||
#####################################
|
||||
### Internal Macros ###
|
||||
#####################################
|
||||
|
||||
!macro __MementoCheckSettings
|
||||
|
||||
!ifndef MEMENTO_REGISTRY_ROOT | MEMENTO_REGISTRY_KEY
|
||||
|
||||
!error "MEMENTO_REGISTRY_ROOT and MEMENTO_REGISTRY_KEY must be defined before using any of Memento's macros"
|
||||
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro __MementoSection flags name id
|
||||
|
||||
!insertmacro __MementoCheckSettings
|
||||
|
||||
!ifndef __MementoSectionIndex
|
||||
|
||||
!error "MementoSectionDone already used!"
|
||||
|
||||
!endif
|
||||
|
||||
!define __MementoSectionLastSectionId `${id}`
|
||||
|
||||
!verbose pop
|
||||
|
||||
Section ${flags} `${name}` `${id}`
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!macroend
|
||||
|
||||
#####################################
|
||||
### User Macros ###
|
||||
#####################################
|
||||
|
||||
!macro MementoSection name id
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro __MementoSection "" `${name}` `${id}`
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MementoUnselectedSection name id
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro __MementoSection /o `${name}` `${id}`
|
||||
|
||||
!define __MementoSectionUnselected
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MementoSectionEnd
|
||||
|
||||
SectionEnd
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro __MementoCheckSettings
|
||||
|
||||
!ifndef __MementoSectionIndex
|
||||
|
||||
!error "MementoSectionDone already used!"
|
||||
|
||||
!endif
|
||||
|
||||
!define /MATH __MementoSectionIndexNext \
|
||||
${__MementoSectionIndex} + 1
|
||||
|
||||
Function __MementoSectionMarkNew${__MementoSectionIndex}
|
||||
|
||||
ClearErrors
|
||||
ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
|
||||
|
||||
${If} ${Errors}
|
||||
|
||||
!insertmacro SetSectionFlag `${${__MementoSectionLastSectionId}}` ${SF_BOLD}
|
||||
|
||||
${EndIf}
|
||||
|
||||
GetFunctionAddress $0 __MementoSectionMarkNew${__MementoSectionIndexNext}
|
||||
Goto $0
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function __MementoSectionRestoreStatus${__MementoSectionIndex}
|
||||
|
||||
ClearErrors
|
||||
ReadRegDWORD $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}`
|
||||
|
||||
!ifndef __MementoSectionUnselected
|
||||
|
||||
${If} ${Errors}
|
||||
${OrIf} $0 != 0
|
||||
|
||||
!insertmacro SelectSection `${${__MementoSectionLastSectionId}}`
|
||||
|
||||
${Else}
|
||||
|
||||
!insertmacro UnselectSection `${${__MementoSectionLastSectionId}}`
|
||||
|
||||
${EndIf}
|
||||
|
||||
!else
|
||||
|
||||
!undef __MementoSectionUnselected
|
||||
|
||||
${If} ${Errors}
|
||||
${OrIf} $0 == 0
|
||||
|
||||
!insertmacro UnselectSection `${${__MementoSectionLastSectionId}}`
|
||||
|
||||
${Else}
|
||||
|
||||
!insertmacro SelectSection `${${__MementoSectionLastSectionId}}`
|
||||
|
||||
${EndIf}
|
||||
|
||||
!endif
|
||||
|
||||
GetFunctionAddress $0 __MementoSectionRestoreStatus${__MementoSectionIndexNext}
|
||||
Goto $0
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function __MementoSectionSaveStatus${__MementoSectionIndex}
|
||||
|
||||
${If} ${SectionIsSelected} `${${__MementoSectionLastSectionId}}`
|
||||
|
||||
WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 1
|
||||
|
||||
${Else}
|
||||
|
||||
WriteRegDWORD ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` `MementoSection_${__MementoSectionLastSectionId}` 0
|
||||
|
||||
${EndIf}
|
||||
|
||||
GetFunctionAddress $0 __MementoSectionSaveStatus${__MementoSectionIndexNext}
|
||||
Goto $0
|
||||
|
||||
FunctionEnd
|
||||
|
||||
!undef __MementoSectionIndex
|
||||
!define __MementoSectionIndex ${__MementoSectionIndexNext}
|
||||
!undef __MementoSectionIndexNext
|
||||
|
||||
!undef __MementoSectionLastSectionId
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MementoSectionDone
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro __MementoCheckSettings
|
||||
|
||||
Function __MementoSectionMarkNew${__MementoSectionIndex}
|
||||
FunctionEnd
|
||||
|
||||
Function __MementoSectionRestoreStatus${__MementoSectionIndex}
|
||||
FunctionEnd
|
||||
|
||||
Function __MementoSectionSaveStatus${__MementoSectionIndex}
|
||||
FunctionEnd
|
||||
|
||||
!undef __MementoSectionIndex
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MementoSectionRestore
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro __MementoCheckSettings
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
Push $2
|
||||
Push $3
|
||||
|
||||
# check for first usage
|
||||
|
||||
ClearErrors
|
||||
|
||||
ReadRegStr $0 ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed
|
||||
|
||||
${If} ${Errors}
|
||||
|
||||
# use script defaults on first run
|
||||
Goto done
|
||||
|
||||
${EndIf}
|
||||
|
||||
# mark new components in bold
|
||||
|
||||
Call __MementoSectionMarkNew1
|
||||
|
||||
# mark section groups in bold
|
||||
|
||||
StrCpy $0 0
|
||||
StrCpy $1 ""
|
||||
StrCpy $2 ""
|
||||
StrCpy $3 ""
|
||||
|
||||
loop:
|
||||
|
||||
ClearErrors
|
||||
|
||||
${If} ${SectionIsBold} $0
|
||||
|
||||
${If} $1 != ""
|
||||
|
||||
!insertmacro SetSectionFlag $1 ${SF_BOLD}
|
||||
|
||||
${EndIf}
|
||||
|
||||
${If} $2 != ""
|
||||
|
||||
!insertmacro SetSectionFlag $2 ${SF_BOLD}
|
||||
|
||||
${EndIf}
|
||||
|
||||
${If} $3 != ""
|
||||
|
||||
!insertmacro SetSectionFlag $3 ${SF_BOLD}
|
||||
|
||||
${EndIf}
|
||||
|
||||
${ElseIf} ${Errors}
|
||||
|
||||
Goto loop_end
|
||||
|
||||
${EndIf}
|
||||
|
||||
${If} ${SectionIsSectionGroup} $0
|
||||
|
||||
${If} $1 == ""
|
||||
|
||||
StrCpy $1 $0
|
||||
|
||||
${ElseIf} $2 == ""
|
||||
|
||||
StrCpy $2 $0
|
||||
|
||||
${ElseIf} $3 == ""
|
||||
|
||||
StrCpy $3 $0
|
||||
|
||||
${EndIf}
|
||||
|
||||
${EndIf}
|
||||
|
||||
${If} ${SectionIsSectionGroupEnd} $0
|
||||
|
||||
${If} $3 != ""
|
||||
|
||||
StrCpy $3 ""
|
||||
|
||||
${ElseIf} $2 != ""
|
||||
|
||||
StrCpy $2 ""
|
||||
|
||||
${ElseIf} $1 != ""
|
||||
|
||||
StrCpy $1 ""
|
||||
|
||||
${EndIf}
|
||||
|
||||
${EndIf}
|
||||
|
||||
IntOp $0 $0 + 1
|
||||
|
||||
Goto loop
|
||||
loop_end:
|
||||
|
||||
# restore sections' status
|
||||
|
||||
Call __MementoSectionRestoreStatus1
|
||||
|
||||
# all done
|
||||
|
||||
done:
|
||||
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MementoSectionSave
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro __MementoCheckSettings
|
||||
|
||||
Push $0
|
||||
|
||||
WriteRegStr ${MEMENTO_REGISTRY_ROOT} `${MEMENTO_REGISTRY_KEY}` MementoSectionUsed ""
|
||||
|
||||
Call __MementoSectionSaveStatus1
|
||||
|
||||
Pop $0
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
|
||||
|
||||
!endif # ___MEMENTO_NSH___
|
||||
|
||||
!verbose pop
|
@ -1,469 +0,0 @@
|
||||
/*
|
||||
|
||||
MultiUser.nsh
|
||||
|
||||
Installer configuration for multi-user Windows environments
|
||||
|
||||
Copyright 2008-2009 Joost Verburg
|
||||
|
||||
*/
|
||||
|
||||
!ifndef MULTIUSER_INCLUDED
|
||||
!define MULTIUSER_INCLUDED
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
;Standard NSIS header files
|
||||
|
||||
!ifdef MULTIUSER_MUI
|
||||
!include MUI2.nsh
|
||||
!endif
|
||||
!include nsDialogs.nsh
|
||||
!include LogicLib.nsh
|
||||
!include WinVer.nsh
|
||||
!include FileFunc.nsh
|
||||
|
||||
;Variables
|
||||
|
||||
Var MultiUser.Privileges
|
||||
Var MultiUser.InstallMode
|
||||
|
||||
;Command line installation mode setting
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE
|
||||
!include StrFunc.nsh
|
||||
!ifndef StrStr_INCLUDED
|
||||
${StrStr}
|
||||
!endif
|
||||
!ifndef MULTIUSER_NOUNINSTALL
|
||||
!ifndef UnStrStr_INCLUDED
|
||||
${UnStrStr}
|
||||
!endif
|
||||
!endif
|
||||
|
||||
Var MultiUser.Parameters
|
||||
Var MultiUser.Result
|
||||
!endif
|
||||
|
||||
;Installation folder stored in registry
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
|
||||
Var MultiUser.InstDir
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME
|
||||
Var MultiUser.DefaultKeyValue
|
||||
!endif
|
||||
|
||||
;Windows Vista UAC setting
|
||||
|
||||
!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin
|
||||
RequestExecutionLevel admin
|
||||
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS
|
||||
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power
|
||||
RequestExecutionLevel admin
|
||||
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS
|
||||
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Highest
|
||||
RequestExecutionLevel highest
|
||||
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS
|
||||
!else
|
||||
RequestExecutionLevel user
|
||||
!endif
|
||||
|
||||
/*
|
||||
|
||||
Install modes
|
||||
|
||||
*/
|
||||
|
||||
!macro MULTIUSER_INSTALLMODE_ALLUSERS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
|
||||
|
||||
;Install mode initialization - per-machine
|
||||
|
||||
${ifnot} ${IsNT}
|
||||
${orif} $MultiUser.Privileges == "Admin"
|
||||
${orif} $MultiUser.Privileges == "Power"
|
||||
|
||||
StrCpy $MultiUser.InstallMode AllUsers
|
||||
|
||||
SetShellVarContext all
|
||||
|
||||
!if "${UNINSTALLER_PREFIX}" != UN
|
||||
;Set default installation location for installer
|
||||
!ifdef MULTIUSER_INSTALLMODE_INSTDIR
|
||||
StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
|
||||
|
||||
ReadRegStr $MultiUser.InstDir HKLM "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}"
|
||||
|
||||
${if} $MultiUser.InstDir != ""
|
||||
StrCpy $INSTDIR $MultiUser.InstDir
|
||||
${endif}
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION
|
||||
Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
|
||||
!endif
|
||||
|
||||
${endif}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_INSTALLMODE_CURRENTUSER UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
|
||||
|
||||
;Install mode initialization - per-user
|
||||
|
||||
${if} ${IsNT}
|
||||
|
||||
StrCpy $MultiUser.InstallMode CurrentUser
|
||||
|
||||
SetShellVarContext current
|
||||
|
||||
!if "${UNINSTALLER_PREFIX}" != UN
|
||||
;Set default installation location for installer
|
||||
!ifdef MULTIUSER_INSTALLMODE_INSTDIR
|
||||
${if} ${AtLeastWin2000}
|
||||
StrCpy $INSTDIR "$LOCALAPPDATA\${MULTIUSER_INSTALLMODE_INSTDIR}"
|
||||
${else}
|
||||
StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
|
||||
${endif}
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
|
||||
|
||||
ReadRegStr $MultiUser.InstDir HKCU "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}"
|
||||
|
||||
${if} $MultiUser.InstDir != ""
|
||||
StrCpy $INSTDIR $MultiUser.InstDir
|
||||
${endif}
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION
|
||||
Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
|
||||
!endif
|
||||
|
||||
${endif}
|
||||
|
||||
!macroend
|
||||
|
||||
Function MultiUser.InstallMode.AllUsers
|
||||
!insertmacro MULTIUSER_INSTALLMODE_ALLUSERS "" ""
|
||||
FunctionEnd
|
||||
|
||||
Function MultiUser.InstallMode.CurrentUser
|
||||
!insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER "" ""
|
||||
FunctionEnd
|
||||
|
||||
!ifndef MULTIUSER_NOUNINSTALL
|
||||
|
||||
Function un.MultiUser.InstallMode.AllUsers
|
||||
!insertmacro MULTIUSER_INSTALLMODE_ALLUSERS UN .un
|
||||
FunctionEnd
|
||||
|
||||
Function un.MultiUser.InstallMode.CurrentUser
|
||||
!insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER UN .un
|
||||
FunctionEnd
|
||||
|
||||
!endif
|
||||
|
||||
/*
|
||||
|
||||
Installer/uninstaller initialization
|
||||
|
||||
*/
|
||||
|
||||
!macro MULTIUSER_INIT_QUIT UNINSTALLER_FUNCPREFIX
|
||||
|
||||
!ifdef MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUNCTIONQUIT
|
||||
Call "${MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUCTIONQUIT}
|
||||
!else
|
||||
Quit
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_INIT_TEXTS
|
||||
|
||||
!ifndef MULTIUSER_INIT_TEXT_ADMINREQUIRED
|
||||
!define MULTIUSER_INIT_TEXT_ADMINREQUIRED "$(^Caption) requires administrator priviledges."
|
||||
!endif
|
||||
|
||||
!ifndef MULTIUSER_INIT_TEXT_POWERREQUIRED
|
||||
!define MULTIUSER_INIT_TEXT_POWERREQUIRED "$(^Caption) requires at least Power User priviledges."
|
||||
!endif
|
||||
|
||||
!ifndef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE
|
||||
!define MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have sufficient privileges to install $(^Name) for all users of this compuetr."
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_INIT_CHECKS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
|
||||
|
||||
;Installer initialization - check privileges and set install mode
|
||||
|
||||
!insertmacro MULTIUSER_INIT_TEXTS
|
||||
|
||||
UserInfo::GetAccountType
|
||||
Pop $MultiUser.Privileges
|
||||
|
||||
${if} ${IsNT}
|
||||
|
||||
;Check privileges
|
||||
|
||||
!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin
|
||||
|
||||
${if} $MultiUser.Privileges != "Admin"
|
||||
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}"
|
||||
!insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}"
|
||||
${endif}
|
||||
|
||||
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power
|
||||
|
||||
${if} $MultiUser.Privileges != "Power"
|
||||
${andif} $MultiUser.Privileges != "Admin"
|
||||
${if} ${AtMostWinXP}
|
||||
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_POWERREQUIRED}"
|
||||
${else}
|
||||
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}"
|
||||
${endif}
|
||||
!insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}"
|
||||
${endif}
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_EXECUTIONLEVEL_ALLUSERS
|
||||
|
||||
;Default to per-machine installation if possible
|
||||
|
||||
${if} $MultiUser.Privileges == "Admin"
|
||||
${orif} $MultiUser.Privileges == "Power"
|
||||
!ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
|
||||
!else
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME
|
||||
|
||||
;Set installation mode to setting from a previous installation
|
||||
|
||||
!ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER
|
||||
ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
|
||||
${if} $MultiUser.DefaultKeyValue == ""
|
||||
ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
|
||||
${if} $MultiUser.DefaultKeyValue != ""
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
|
||||
${endif}
|
||||
${endif}
|
||||
!else
|
||||
ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
|
||||
${if} $MultiUser.DefaultKeyValue == ""
|
||||
ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}"
|
||||
${if} $MultiUser.DefaultKeyValue != ""
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
|
||||
${endif}
|
||||
${endif}
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
${else}
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
|
||||
${endif}
|
||||
|
||||
!else
|
||||
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
|
||||
|
||||
!endif
|
||||
|
||||
!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE
|
||||
|
||||
;Check for install mode setting on command line
|
||||
|
||||
${${UNINSTALLER_FUNCPREFIX}GetParameters} $MultiUser.Parameters
|
||||
|
||||
${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/CurrentUser"
|
||||
|
||||
${if} $MultiUser.Result != ""
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser
|
||||
${endif}
|
||||
|
||||
${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/AllUsers"
|
||||
|
||||
${if} $MultiUser.Result != ""
|
||||
${if} $MultiUser.Privileges == "Admin"
|
||||
${orif} $MultiUser.Privileges == "Power"
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
|
||||
${else}
|
||||
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE}"
|
||||
${endif}
|
||||
${endif}
|
||||
|
||||
!endif
|
||||
|
||||
${else}
|
||||
|
||||
;Not running Windows NT, per-user installation not supported
|
||||
|
||||
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
|
||||
|
||||
${endif}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_INIT
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro MULTIUSER_INIT_CHECKS "" ""
|
||||
|
||||
!verbose pop
|
||||
!macroend
|
||||
|
||||
!ifndef MULTIUSER_NOUNINSTALL
|
||||
|
||||
!macro MULTIUSER_UNINIT
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!insertmacro MULTIUSER_INIT_CHECKS Un un.
|
||||
|
||||
!verbose pop
|
||||
!macroend
|
||||
|
||||
!endif
|
||||
|
||||
/*
|
||||
|
||||
Modern UI 2 page
|
||||
|
||||
*/
|
||||
|
||||
!ifdef MULTIUSER_MUI
|
||||
|
||||
!macro MULTIUSER_INSTALLMODEPAGE_INTERFACE
|
||||
|
||||
!ifndef MULTIUSER_INSTALLMODEPAGE_INTERFACE
|
||||
!define MULTIUSER_INSTALLMODEPAGE_INTERFACE
|
||||
Var MultiUser.InstallModePage
|
||||
|
||||
Var MultiUser.InstallModePage.Text
|
||||
|
||||
Var MultiUser.InstallModePage.AllUsers
|
||||
Var MultiUser.InstallModePage.CurrentUser
|
||||
|
||||
Var MultiUser.InstallModePage.ReturnValue
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE
|
||||
|
||||
!insertmacro MUI_SET MULTIUSER_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLMODEPAGE ""
|
||||
!insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE
|
||||
|
||||
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_TOP "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)"
|
||||
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS "$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)"
|
||||
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER "$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)"
|
||||
|
||||
PageEx custom
|
||||
|
||||
PageCallbacks MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID}
|
||||
|
||||
Caption " "
|
||||
|
||||
PageExEnd
|
||||
|
||||
!insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID}
|
||||
|
||||
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP
|
||||
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS
|
||||
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_PAGE_INSTALLMODE
|
||||
|
||||
;Modern UI page for install mode
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!ifndef MULTIUSER_EXECUTIONLEVEL_ALLUSERS
|
||||
!error "A mixed-mode installation requires MULTIUSER_EXECUTIONLEVEL to be set to Admin, Power or Highest."
|
||||
!endif
|
||||
|
||||
!insertmacro MUI_PAGE_INIT
|
||||
!insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE
|
||||
|
||||
!verbose pop
|
||||
|
||||
!macroend
|
||||
|
||||
!macro MULTIUSER_FUNCTION_INSTALLMODEPAGE PRE LEAVE
|
||||
|
||||
;Page functions of Modern UI page
|
||||
|
||||
Function "${PRE}"
|
||||
|
||||
${ifnot} ${IsNT}
|
||||
Abort
|
||||
${endif}
|
||||
|
||||
${if} $MultiUser.Privileges != "Power"
|
||||
${andif} $MultiUser.Privileges != "Admin"
|
||||
Abort
|
||||
${endif}
|
||||
|
||||
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
|
||||
!insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) $(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE)
|
||||
|
||||
nsDialogs::Create 1018
|
||||
Pop $MultiUser.InstallModePage
|
||||
|
||||
${NSD_CreateLabel} 0u 0u 300u 20u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}"
|
||||
Pop $MultiUser.InstallModePage.Text
|
||||
|
||||
${NSD_CreateRadioButton} 20u 50u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}"
|
||||
Pop $MultiUser.InstallModePage.AllUsers
|
||||
|
||||
${NSD_CreateRadioButton} 20u 70u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}"
|
||||
Pop $MultiUser.InstallModePage.CurrentUser
|
||||
|
||||
${if} $MultiUser.InstallMode == "AllUsers"
|
||||
SendMessage $MultiUser.InstallModePage.AllUsers ${BM_SETCHECK} ${BST_CHECKED} 0
|
||||
${else}
|
||||
SendMessage $MultiUser.InstallModePage.CurrentUser ${BM_SETCHECK} ${BST_CHECKED} 0
|
||||
${endif}
|
||||
|
||||
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
|
||||
nsDialogs::Show
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function "${LEAVE}"
|
||||
SendMessage $MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 $MultiUser.InstallModePage.ReturnValue
|
||||
|
||||
${if} $MultiUser.InstallModePage.ReturnValue = ${BST_CHECKED}
|
||||
Call MultiUser.InstallMode.AllUsers
|
||||
${else}
|
||||
Call MultiUser.InstallMode.CurrentUser
|
||||
${endif}
|
||||
|
||||
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
|
||||
FunctionEnd
|
||||
|
||||
!macroend
|
||||
|
||||
!endif
|
||||
|
||||
!verbose pop
|
||||
!endif
|
@ -1,273 +0,0 @@
|
||||
; Sections.nsh
|
||||
;
|
||||
; Defines and macros for section control
|
||||
;
|
||||
; Include in your script using:
|
||||
; !include "Sections.nsh"
|
||||
|
||||
;--------------------------------
|
||||
|
||||
!ifndef SECTIONS_INCLUDED
|
||||
|
||||
!define SECTIONS_INCLUDED
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; Generic section defines
|
||||
|
||||
# section or section group is selected
|
||||
!define SF_SELECTED 1
|
||||
# section group
|
||||
!define SF_SECGRP 2
|
||||
!define SF_SUBSEC 2 # deprecated
|
||||
# section group end marker
|
||||
!define SF_SECGRPEND 4
|
||||
!define SF_SUBSECEND 4 # deprecated
|
||||
# bold text (Section !blah)
|
||||
!define SF_BOLD 8
|
||||
# read only (SectionIn RO)
|
||||
!define SF_RO 16
|
||||
# expanded section group (SectionGroup /e blah)
|
||||
!define SF_EXPAND 32
|
||||
# section group is partially selected
|
||||
!define SF_PSELECTED 64 # internal
|
||||
# internal
|
||||
!define SF_TOGGLED 128 # internal
|
||||
!define SF_NAMECHG 256 # internal
|
||||
|
||||
# mask to toggle off the selected flag
|
||||
!define SECTION_OFF 0xFFFFFFFE
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; Select / unselect / reserve section
|
||||
|
||||
!macro SelectSection SECTION
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
StrCpy $1 "${SECTION}"
|
||||
SectionGetFlags $1 $0
|
||||
IntOp $0 $0 | ${SF_SELECTED}
|
||||
SectionSetFlags $1 $0
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro UnselectSection SECTION
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
StrCpy $1 "${SECTION}"
|
||||
SectionGetFlags $1 $0
|
||||
IntOp $0 $0 & ${SECTION_OFF}
|
||||
SectionSetFlags $1 $0
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
; If section selected, will unselect, if unselected, will select
|
||||
|
||||
!macro ReverseSection SECTION
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
StrCpy $1 "${SECTION}"
|
||||
SectionGetFlags $1 $0
|
||||
IntOp $0 $0 ^ ${SF_SELECTED}
|
||||
SectionSetFlags $1 $0
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; Macros for mutually exclusive section selection
|
||||
; Written by Tim Gallagher
|
||||
;
|
||||
; See one-section.nsi for an example of usage
|
||||
|
||||
; Starts the Radio Button Block
|
||||
; You should pass a variable that keeps the selected section
|
||||
; as the first parameter for this macro. This variable should
|
||||
; be initialized to the default section's index.
|
||||
;
|
||||
; As this macro uses $R0 and $R1 you can't use those two as the
|
||||
; varible which will keep the selected section.
|
||||
|
||||
!macro StartRadioButtons var
|
||||
|
||||
!define StartRadioButtons_Var "${var}"
|
||||
|
||||
Push $R0
|
||||
|
||||
SectionGetFlags "${StartRadioButtons_Var}" $R0
|
||||
IntOp $R0 $R0 & ${SECTION_OFF}
|
||||
SectionSetFlags "${StartRadioButtons_Var}" $R0
|
||||
|
||||
Push $R1
|
||||
|
||||
StrCpy $R1 "${StartRadioButtons_Var}"
|
||||
|
||||
!macroend
|
||||
|
||||
; A radio button
|
||||
|
||||
!macro RadioButton SECTION_NAME
|
||||
|
||||
SectionGetFlags ${SECTION_NAME} $R0
|
||||
IntOp $R0 $R0 & ${SF_SELECTED}
|
||||
IntCmp $R0 ${SF_SELECTED} 0 +2 +2
|
||||
StrCpy "${StartRadioButtons_Var}" ${SECTION_NAME}
|
||||
|
||||
!macroend
|
||||
|
||||
; Ends the radio button block
|
||||
|
||||
!macro EndRadioButtons
|
||||
|
||||
StrCmp $R1 "${StartRadioButtons_Var}" 0 +4 ; selection hasn't changed
|
||||
SectionGetFlags "${StartRadioButtons_Var}" $R0
|
||||
IntOp $R0 $R0 | ${SF_SELECTED}
|
||||
SectionSetFlags "${StartRadioButtons_Var}" $R0
|
||||
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
!undef StartRadioButtons_Var
|
||||
|
||||
!macroend
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; These are two macros you can use to set a Section in an InstType
|
||||
; or clear it from an InstType.
|
||||
;
|
||||
; Written by Robert Kehl
|
||||
;
|
||||
; For details, see http://nsis.sourceforge.net/wiki/SetSectionInInstType%2C_ClearSectionInInstType
|
||||
;
|
||||
; Use the defines below for the WANTED_INSTTYPE paramter.
|
||||
|
||||
!define INSTTYPE_1 1
|
||||
!define INSTTYPE_2 2
|
||||
!define INSTTYPE_3 4
|
||||
!define INSTTYPE_4 8
|
||||
!define INSTTYPE_5 16
|
||||
!define INSTTYPE_6 32
|
||||
!define INSTTYPE_7 64
|
||||
!define INSTTYPE_8 128
|
||||
!define INSTTYPE_9 256
|
||||
!define INSTTYPE_10 512
|
||||
!define INSTTYPE_11 1024
|
||||
!define INSTTYPE_12 2048
|
||||
!define INSTTYPE_13 4096
|
||||
!define INSTTYPE_14 8192
|
||||
!define INSTTYPE_15 16384
|
||||
!define INSTTYPE_16 32768
|
||||
!define INSTTYPE_17 65536
|
||||
!define INSTTYPE_18 131072
|
||||
!define INSTTYPE_19 262144
|
||||
!define INSTTYPE_20 524288
|
||||
!define INSTTYPE_21 1048576
|
||||
!define INSTTYPE_22 2097152
|
||||
!define INSTTYPE_23 4194304
|
||||
!define INSTTYPE_24 8388608
|
||||
!define INSTTYPE_25 16777216
|
||||
!define INSTTYPE_26 33554432
|
||||
!define INSTTYPE_27 67108864
|
||||
!define INSTTYPE_28 134217728
|
||||
!define INSTTYPE_29 268435456
|
||||
!define INSTTYPE_30 536870912
|
||||
!define INSTTYPE_31 1073741824
|
||||
!define INSTTYPE_32 2147483648
|
||||
|
||||
!macro SetSectionInInstType SECTION_NAME WANTED_INSTTYPE
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
StrCpy $1 "${SECTION_NAME}"
|
||||
SectionGetInstTypes $1 $0
|
||||
IntOp $0 $0 | ${WANTED_INSTTYPE}
|
||||
SectionSetInstTypes $1 $0
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro ClearSectionInInstType SECTION_NAME WANTED_INSTTYPE
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
Push $2
|
||||
StrCpy $2 "${SECTION_NAME}"
|
||||
SectionGetInstTypes $2 $0
|
||||
StrCpy $1 ${WANTED_INSTTYPE}
|
||||
IntOp $1 $1 ~
|
||||
IntOp $0 $0 & $1
|
||||
SectionSetInstTypes $2 $0
|
||||
Pop $2
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; Set / clear / check bits in a section's flags
|
||||
; Written by derekrprice
|
||||
|
||||
; Set one or more bits in a sections's flags
|
||||
|
||||
!macro SetSectionFlag SECTION BITS
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
StrCpy $R1 "${SECTION}"
|
||||
SectionGetFlags $R1 $R0
|
||||
IntOp $R0 $R0 | "${BITS}"
|
||||
SectionSetFlags $R1 $R0
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
!macroend
|
||||
|
||||
; Clear one or more bits in section's flags
|
||||
|
||||
!macro ClearSectionFlag SECTION BITS
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
StrCpy $R2 "${SECTION}"
|
||||
SectionGetFlags $R2 $R0
|
||||
IntOp $R1 "${BITS}" ~
|
||||
IntOp $R0 $R0 & $R1
|
||||
SectionSetFlags $R2 $R0
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
!macroend
|
||||
|
||||
; Check if one or more bits in section's flags are set
|
||||
; If they are, jump to JUMPIFSET
|
||||
; If not, jump to JUMPIFNOTSET
|
||||
|
||||
!macro SectionFlagIsSet SECTION BITS JUMPIFSET JUMPIFNOTSET
|
||||
Push $R0
|
||||
SectionGetFlags "${SECTION}" $R0
|
||||
IntOp $R0 $R0 & "${BITS}"
|
||||
IntCmp $R0 "${BITS}" +3
|
||||
Pop $R0
|
||||
StrCmp "" "${JUMPIFNOTSET}" +3 "${JUMPIFNOTSET}"
|
||||
Pop $R0
|
||||
Goto "${JUMPIFSET}"
|
||||
!macroend
|
||||
|
||||
;--------------------------------
|
||||
|
||||
!endif
|
@ -1,203 +0,0 @@
|
||||
/*
|
||||
|
||||
NOTE:
|
||||
-----
|
||||
This macro is provided for backwards compatibility with NSIS 2.0 scripts.
|
||||
It's recommended you update your scripts to use the new Library.nsh macros.
|
||||
|
||||
|
||||
Macro - Upgrade DLL File
|
||||
Written by Joost Verburg
|
||||
------------------------
|
||||
|
||||
Parameters:
|
||||
LOCALFILE Location of the new DLL file (on the compiler system)
|
||||
DESTFILE Location of the DLL file that should be upgraded (on the user's system)
|
||||
TEMPBASEDIR Directory on the user's system to store a temporary file when the system has
|
||||
to be rebooted.
|
||||
For Win9x/ME support, this should be on the same volume as DESTFILE.
|
||||
The Windows temp directory could be located on any volume, so you cannot use
|
||||
this directory.
|
||||
|
||||
Define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL that does not have to be registered.
|
||||
|
||||
Notes:
|
||||
|
||||
* If you want to support Windows 9x/ME, you can only use short filenames (8.3).
|
||||
|
||||
* This macro uses the GetDLLVersionLocal command to retrieve the version of local libraries.
|
||||
This command is only supported when compiling on a Windows system.
|
||||
|
||||
------------------------
|
||||
|
||||
Example:
|
||||
|
||||
!insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR"
|
||||
|
||||
*/
|
||||
|
||||
!ifndef UPGRADEDLL_INCLUDED
|
||||
|
||||
!define UPGRADEDLL_INCLUDED
|
||||
|
||||
!macro __UpgradeDLL_Helper_AddRegToolEntry mode filename tempdir
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
|
||||
;------------------------
|
||||
;Copy the parameters
|
||||
|
||||
Push "${filename}"
|
||||
Push "${tempdir}"
|
||||
|
||||
Pop $R2 ; temporary directory
|
||||
Pop $R1 ; file name to register
|
||||
|
||||
;------------------------
|
||||
;Advance counter
|
||||
|
||||
StrCpy $R0 0
|
||||
ReadRegDWORD $R0 HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count"
|
||||
IntOp $R0 $R0 + 1
|
||||
WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count" "$R0"
|
||||
|
||||
;------------------------
|
||||
;Setup RegTool
|
||||
|
||||
ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
|
||||
StrCpy $R3 $R3 -4 1
|
||||
IfFileExists $R3 +3
|
||||
|
||||
File /oname=$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool.bin"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
|
||||
"NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe" /S'
|
||||
|
||||
;------------------------
|
||||
;Add RegTool entry
|
||||
|
||||
WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.file" "$R1"
|
||||
WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.mode" "${mode}"
|
||||
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro UpgradeDLL LOCALFILE DESTFILE TEMPBASEDIR
|
||||
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
Push $R4
|
||||
Push $R5
|
||||
|
||||
!define UPGRADEDLL_UNIQUE "${__FILE__}${__LINE__}"
|
||||
|
||||
SetOverwrite try
|
||||
|
||||
;------------------------
|
||||
;Copy the parameters used on run-time to a variable
|
||||
;This allows the usage of variables as paramter
|
||||
|
||||
StrCpy $R4 "${DESTFILE}"
|
||||
StrCpy $R5 "${TEMPBASEDIR}"
|
||||
|
||||
;------------------------
|
||||
;Get version information
|
||||
|
||||
IfFileExists $R4 0 "upgradedll.copy_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
ClearErrors
|
||||
GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
|
||||
GetDLLVersion $R4 $R2 $R3
|
||||
IfErrors "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
IntCmpU $R0 $R2 0 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
|
||||
IntCmpU $R1 $R3 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.done_${UPGRADEDLL_UNIQUE}" \
|
||||
"upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;Upgrade
|
||||
|
||||
"upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:"
|
||||
!ifndef UPGRADEDLL_NOREGISTER
|
||||
;Unregister the DLL
|
||||
UnRegDLL $R4
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Copy
|
||||
|
||||
ClearErrors
|
||||
StrCpy $R0 $R4
|
||||
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
|
||||
IfErrors 0 "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;Copy on reboot
|
||||
|
||||
GetTempFileName $R0 $R5
|
||||
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
|
||||
Rename /REBOOTOK $R0 $R4
|
||||
|
||||
;------------------------
|
||||
;Register on reboot
|
||||
|
||||
!insertmacro __UpgradeDLL_Helper_AddRegToolEntry 'D' $R4 $R5
|
||||
|
||||
Goto "upgradedll.done_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;DLL does not exist
|
||||
|
||||
"upgradedll.copy_${UPGRADEDLL_UNIQUE}:"
|
||||
StrCpy $R0 $R4
|
||||
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;Register
|
||||
|
||||
"upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:"
|
||||
!ifndef UPGRADEDLL_NOREGISTER
|
||||
RegDLL $R4
|
||||
!endif
|
||||
|
||||
;------------------------
|
||||
;Done
|
||||
|
||||
"upgradedll.done_${UPGRADEDLL_UNIQUE}:"
|
||||
|
||||
Pop $R5
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
;------------------------
|
||||
;End
|
||||
|
||||
Goto "upgradedll.end_${UPGRADEDLL_UNIQUE}"
|
||||
|
||||
;------------------------
|
||||
;Extract
|
||||
|
||||
"upgradedll.file_${UPGRADEDLL_UNIQUE}:"
|
||||
File /oname=$R0 "${LOCALFILE}"
|
||||
Return
|
||||
|
||||
"upgradedll.end_${UPGRADEDLL_UNIQUE}:"
|
||||
|
||||
SetOverwrite lastused
|
||||
|
||||
!undef UPGRADEDLL_UNIQUE
|
||||
|
||||
!macroend
|
||||
|
||||
!endif
|
@ -1,56 +0,0 @@
|
||||
; ---------------------
|
||||
; Util.nsh
|
||||
; ---------------------
|
||||
;
|
||||
; Voodoo macros to make end-user usage easier. This may be documented someday.
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!ifndef ___UTIL__NSH___
|
||||
!define ___UTIL__NSH___
|
||||
|
||||
# see WinVer.nsh and *Func.nsh for usage examples
|
||||
!macro CallArtificialFunction NAME
|
||||
!ifndef __UNINSTALL__
|
||||
!define CallArtificialFunction_TYPE inst
|
||||
!else
|
||||
!define CallArtificialFunction_TYPE uninst
|
||||
!endif
|
||||
Call :.${NAME}${CallArtificialFunction_TYPE}
|
||||
!ifndef ${NAME}${CallArtificialFunction_TYPE}_DEFINED
|
||||
Goto ${NAME}${CallArtificialFunction_TYPE}_DONE
|
||||
!define ${NAME}${CallArtificialFunction_TYPE}_DEFINED
|
||||
.${NAME}${CallArtificialFunction_TYPE}:
|
||||
!insertmacro ${NAME}
|
||||
Return
|
||||
${NAME}${CallArtificialFunction_TYPE}_DONE:
|
||||
!endif
|
||||
!undef CallArtificialFunction_TYPE
|
||||
!macroend
|
||||
!define CallArtificialFunction `!insertmacro CallArtificialFunction`
|
||||
|
||||
# for usage of artificial functions inside artificial functions
|
||||
# macro recursion is prohibited
|
||||
!macro CallArtificialFunction2 NAME
|
||||
!ifndef __UNINSTALL__
|
||||
!define CallArtificialFunction2_TYPE inst
|
||||
!else
|
||||
!define CallArtificialFunction2_TYPE uninst
|
||||
!endif
|
||||
Call :.${NAME}${CallArtificialFunction2_TYPE}
|
||||
!ifndef ${NAME}${CallArtificialFunction2_TYPE}_DEFINED
|
||||
Goto ${NAME}${CallArtificialFunction2_TYPE}_DONE
|
||||
!define ${NAME}${CallArtificialFunction2_TYPE}_DEFINED
|
||||
.${NAME}${CallArtificialFunction2_TYPE}:
|
||||
!insertmacro ${NAME}
|
||||
Return
|
||||
${NAME}${CallArtificialFunction2_TYPE}_DONE:
|
||||
!endif
|
||||
!undef CallArtificialFunction2_TYPE
|
||||
!macroend
|
||||
!define CallArtificialFunction2 `!insertmacro CallArtificialFunction2`
|
||||
|
||||
!endif # !___UTIL__NSH___
|
||||
|
||||
!verbose pop
|
@ -1,90 +0,0 @@
|
||||
/*
|
||||
|
||||
VB6RunTime.nsh
|
||||
|
||||
Setup of Visual Basic 6.0 run-time files, including the Oleaut32.dll security update
|
||||
|
||||
Copyright 2008-2009 Joost Verburg
|
||||
|
||||
To obtain the run-time files, download and extract
|
||||
http://nsis.sourceforge.net/vb6runtime.zip
|
||||
|
||||
Script code for installation:
|
||||
|
||||
!insertmacro InstallVB6RunTime FOLDER ALREADY_INSTALLED
|
||||
|
||||
in which FOLDER is the location of the run-time files and ALREADY_INSTALLED is the
|
||||
name of a variable that is empty when the application is installed for the first time
|
||||
and non-empty otherwise
|
||||
|
||||
Script code for uninstallation:
|
||||
|
||||
!insertmacro UnInstallVB6RunTime
|
||||
|
||||
Remarks:
|
||||
|
||||
* You may have to install additional files for such Visual Basic application to work,
|
||||
such as OCX files for user interface controls.
|
||||
|
||||
* Installation of the run-time files requires Administrator or Power User privileges.
|
||||
Use the Multi-User header file to verify whether these privileges are available.
|
||||
|
||||
* Add a Modern UI finish page or another check (see IfRebootFlag in the NSIS Users
|
||||
Manual) to allow the user to restart the computer when necessary.
|
||||
|
||||
*/
|
||||
|
||||
!ifndef VB6_INCLUDED
|
||||
!define VB6_INCLUDED
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!include Library.nsh
|
||||
!include WinVer.nsh
|
||||
|
||||
!macro VB6RunTimeInstall FOLDER ALREADY_INSTALLED
|
||||
|
||||
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\msvbvm60.dll" "$SYSDIR\msvbvm60.dll" "$SYSDIR"
|
||||
|
||||
;The files below will only be installed on Win9x/NT4
|
||||
|
||||
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\olepro32.dll" "$SYSDIR\olepro32.dll" "$SYSDIR"
|
||||
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\comcat.dll" "$SYSDIR\comcat.dll" "$SYSDIR"
|
||||
!insertmacro InstallLib DLL "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\asycfilt.dll" "$SYSDIR\asycfilt.dll" "$SYSDIR"
|
||||
!insertmacro InstallLib TLB "${ALREADY_INSTALLED}" REBOOT_PROTECTED "${FOLDER}\stdole2.tlb" "$SYSDIR\stdole2.tlb" "$SYSDIR"
|
||||
|
||||
Push $R0
|
||||
|
||||
${if} ${IsNT}
|
||||
${if} ${IsWinNT4}
|
||||
ReadRegStr $R0 HKLM "System\CurrentControlSet\Control" "ProductOptions"
|
||||
${if} $R0 == "Terminal Server"
|
||||
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4TS\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
|
||||
${else}
|
||||
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
|
||||
${endif}
|
||||
${endif}
|
||||
${else}
|
||||
;No Oleaut32.dll with the security update has been released for Windows 9x.
|
||||
;The NT4 version is used because NT4 and Win9x used to share the same 2.40 version
|
||||
;and version 2.40.4519.0 is reported to work fine on Win9x.
|
||||
!insertmacro InstallLib REGDLL "${ALREADY_INSTALLED}" REBOOT_NOTPROTECTED "${FOLDER}\NT4\oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
|
||||
${endif}
|
||||
|
||||
Pop $R0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro VB6RunTimeUnInstall
|
||||
|
||||
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll"
|
||||
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll"
|
||||
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll"
|
||||
!insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat.dll"
|
||||
!insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll"
|
||||
!insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb"
|
||||
|
||||
!macroend
|
||||
|
||||
!verbose pop
|
||||
!endif
|
@ -1,47 +0,0 @@
|
||||
; PatchLib v3.0
|
||||
; =============
|
||||
;
|
||||
; Library with macro for use with VPatch (DLL version) in NSIS 2.0.5+
|
||||
; Created by Koen van de Sande
|
||||
|
||||
!include LogicLib.nsh
|
||||
|
||||
!macro VPatchFile PATCHDATA SOURCEFILE TEMPFILE
|
||||
|
||||
Push $1
|
||||
Push $2
|
||||
Push $3
|
||||
Push $4
|
||||
|
||||
Push ${SOURCEFILE}
|
||||
Push ${TEMPFILE}
|
||||
|
||||
Pop $2 # temp file
|
||||
Pop $3 # source file
|
||||
|
||||
InitPluginsDir
|
||||
GetTempFileName $1 $PLUGINSDIR
|
||||
File /oname=$1 ${PATCHDATA}
|
||||
|
||||
vpatch::vpatchfile $1 $3 $2
|
||||
Pop $4
|
||||
DetailPrint $4
|
||||
|
||||
StrCpy $4 $4 2
|
||||
${Unless} $4 == "OK"
|
||||
SetErrors
|
||||
${EndIf}
|
||||
|
||||
${If} ${FileExists} $2
|
||||
Delete $3
|
||||
Rename /REBOOTOK $2 $3
|
||||
${EndIf}
|
||||
|
||||
Delete $1
|
||||
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
|
||||
!macroend
|
@ -1,74 +0,0 @@
|
||||
!ifndef __WIN_WINDEF__INC
|
||||
!define __WIN_WINDEF__INC
|
||||
!verbose push
|
||||
!verbose 3
|
||||
!ifndef __WIN_NOINC_WINDEF
|
||||
|
||||
|
||||
!ifndef MAX_PATH
|
||||
!define MAX_PATH 260
|
||||
!endif
|
||||
#define NULL 0
|
||||
|
||||
|
||||
!macro _Win_MINMAX _intcmp _j1 _j2 _outvar _a _b
|
||||
${_intcmp} "${_a}" "${_b}" ${_j1} ${_j1} ${_j2}
|
||||
StrCpy ${_outvar} "${_a}"
|
||||
goto +2
|
||||
StrCpy ${_outvar} "${_b}"
|
||||
!macroend
|
||||
!ifndef __WIN_MS_NOMINMAX & min & max & min_u & max_u
|
||||
!define min "!insertmacro _Win_MINMAX IntCmp +1 +3 "
|
||||
!define max "!insertmacro _Win_MINMAX IntCmp +3 +1 "
|
||||
!define min_u "!insertmacro _Win_MINMAX IntCmpU +1 +3 "
|
||||
!define max_u "!insertmacro _Win_MINMAX IntCmpU +3 +1 "
|
||||
!endif
|
||||
|
||||
!macro _Win_LOBYTE _outvar _in
|
||||
IntOp ${_outvar} "${_in}" & 0xFF
|
||||
!macroend
|
||||
!define LOBYTE "!insertmacro _Win_LOBYTE "
|
||||
|
||||
!macro _Win_HIBYTE _outvar _in
|
||||
IntOp ${_outvar} "${_in}" >> 8
|
||||
${LOBYTE} ${_outvar} ${_outvar}
|
||||
!macroend
|
||||
!define HIBYTE "!insertmacro _Win_HIBYTE "
|
||||
|
||||
!macro _Win_LOWORD _outvar _in
|
||||
IntOp ${_outvar} "${_in}" & 0xFFFF
|
||||
!macroend
|
||||
!define LOWORD "!insertmacro _Win_LOWORD "
|
||||
|
||||
!macro _Win_HIWORD _outvar _in
|
||||
IntOp ${outvar} "${_in}" >> 16 ;sign extended :(
|
||||
${LOWORD} ${_outvar} ${outvar} ;make sure we strip off the upper word
|
||||
!macroend
|
||||
!define HIWORD "!insertmacro _Win_HIWORD "
|
||||
|
||||
!macro _Win_MAKEWORD _outvar _tmpvar _lo _hi
|
||||
${LOBYTE} ${_outvar} "${_hi}"
|
||||
${LOBYTE} ${_tmpvar} "${_lo}"
|
||||
IntOp ${_outvar} ${_outvar} << 8
|
||||
IntOp ${_outvar} ${_outvar} | ${_tmpvar}
|
||||
!macroend
|
||||
!define MAKEWORD "!insertmacro _Win_MAKEWORD "
|
||||
|
||||
!macro _Win_MAKELONG32 _outvar _tmpvar _wlo _whi
|
||||
${LOWORD} ${_outvar} "${_wlo}"
|
||||
IntOp ${_tmpvar} "${_whi}" << 16
|
||||
IntOp ${_outvar} ${_outvar} | ${_tmpvar}
|
||||
!macroend
|
||||
!define MAKELONG "!insertmacro _Win_MAKELONG32 "
|
||||
!if "${__WIN_PTRSIZE}" <= 4
|
||||
!define MAKEWPARAM "${MAKELONG}"
|
||||
!define MAKELPARAM "${MAKELONG}"
|
||||
!define MAKELRESULT "${MAKELONG}"
|
||||
!else
|
||||
!error "Missing 64bit imp!"
|
||||
!endif
|
||||
|
||||
|
||||
!endif /* __WIN_NOINC_WINDEF */
|
||||
!verbose pop
|
||||
!endif /* __WIN_WINDEF__INC */
|
@ -1,64 +0,0 @@
|
||||
!ifndef __WIN_WINERROR__INC
|
||||
!define __WIN_WINERROR__INC
|
||||
!verbose push
|
||||
!verbose 3
|
||||
!ifndef __WIN_NOINC_WINERROR
|
||||
|
||||
#define NO_ERROR 0
|
||||
!define ERROR_SUCCESS 0
|
||||
!define ERROR_INVALID_FUNCTION 1
|
||||
!define ERROR_FILE_NOT_FOUND 2
|
||||
!define ERROR_PATH_NOT_FOUND 3
|
||||
!define ERROR_TOO_MANY_OPEN_FILES 4
|
||||
!define ERROR_ACCESS_DENIED 5
|
||||
!define ERROR_INVALID_HANDLE 6
|
||||
!define ERROR_ARENA_TRASHED 7
|
||||
!define ERROR_NOT_ENOUGH_MEMORY 8
|
||||
!define ERROR_INVALID_BLOCK 9
|
||||
!define ERROR_BAD_ENVIRONMENT 10
|
||||
!define ERROR_BAD_FORMAT 11
|
||||
!define ERROR_INVALID_ACCESS 12
|
||||
!define ERROR_INVALID_DATA 13
|
||||
!define ERROR_OUTOFMEMORY 14
|
||||
!define ERROR_INVALID_DRIVE 15
|
||||
!define ERROR_CURRENT_DIRECTORY 16
|
||||
!define ERROR_NOT_SAME_DEVICE 17
|
||||
!define ERROR_NO_MORE_FILES 18
|
||||
!define ERROR_WRITE_PROTECT 19
|
||||
!define ERROR_BAD_UNIT 20
|
||||
!define ERROR_NOT_READY 21
|
||||
!define ERROR_BAD_COMMAND 22
|
||||
!define ERROR_CRC 23
|
||||
!define ERROR_BAD_LENGTH 24
|
||||
!define ERROR_SEEK 25
|
||||
!define ERROR_NOT_DOS_DISK 26
|
||||
!define ERROR_SECTOR_NOT_FOUND 27
|
||||
!define ERROR_OUT_OF_PAPER 28
|
||||
!define ERROR_WRITE_FAULT 29
|
||||
!define ERROR_READ_FAULT 30
|
||||
!define ERROR_GEN_FAILURE 31
|
||||
!define ERROR_SHARING_VIOLATION 32
|
||||
!define ERROR_LOCK_VIOLATION 33
|
||||
!define ERROR_WRONG_DISK 34
|
||||
!define ERROR_SHARING_BUFFER_EXCEEDED 36
|
||||
!define ERROR_HANDLE_EOF 38
|
||||
!define ERROR_HANDLE_DISK_FULL 39
|
||||
!define ERROR_NOT_SUPPORTED 50
|
||||
|
||||
!define SEVERITY_SUCCESS 0
|
||||
!define SEVERITY_ERROR 1
|
||||
!define E_UNEXPECTED 0x8000FFFF
|
||||
!define E_NOTIMPL 0x80004001
|
||||
!define E_OUTOFMEMORY 0x8007000E
|
||||
!define E_INVALIDARG 0x80070057
|
||||
!define E_NOINTERFACE 0x80004002
|
||||
!define E_POINTER 0x80004003
|
||||
!define E_HANDLE 0x80070006
|
||||
!define E_ABORT 0x80004004
|
||||
!define E_FAIL 0x80004005
|
||||
!define E_ACCESSDENIED 0x80070005
|
||||
!define E_PENDING 0x8000000A
|
||||
|
||||
!endif /* __WIN_NOINC_WINERROR */
|
||||
!verbose pop
|
||||
!endif /* __WIN_WINERROR__INC */
|
@ -1,209 +0,0 @@
|
||||
!ifndef __WIN_WINNT__INC
|
||||
!define __WIN_WINNT__INC
|
||||
!verbose push
|
||||
!verbose 3
|
||||
!ifndef __WIN_NOINC_WINNT
|
||||
|
||||
|
||||
#define MINCHAR 0x80
|
||||
#define MAXCHAR 0x7f
|
||||
!define MINSHORT 0x8000
|
||||
!define MAXSHORT 0x7fff
|
||||
!define MINLONG 0x80000000
|
||||
!define MAXLONG 0x7fffffff
|
||||
!define MAXBYTE 0xff
|
||||
!define MAXWORD 0xffff
|
||||
!define MAXDWORD 0xffffffff
|
||||
|
||||
!ifndef WIN32_NO_STATUS
|
||||
!define STATUS_WAIT_0 0x00000000
|
||||
!define STATUS_ABANDONED_WAIT_0 0x00000080
|
||||
!define STATUS_USER_APC 0x000000C0
|
||||
!define STATUS_TIMEOUT 0x00000102
|
||||
!define STATUS_PENDING 0x00000103
|
||||
!define DBG_EXCEPTION_HANDLED 0x00010001
|
||||
!define DBG_CONTINUE 0x00010002
|
||||
!define STATUS_SEGMENT_NOTIFICATION 0x40000005
|
||||
!define DBG_TERMINATE_THREAD 0x40010003
|
||||
!define DBG_TERMINATE_PROCESS 0x40010004
|
||||
!define DBG_CONTROL_C 0x40010005
|
||||
!define DBG_CONTROL_BREAK 0x40010008
|
||||
!define DBG_COMMAND_EXCEPTION 0x40010009
|
||||
!define STATUS_GUARD_PAGE_VIOLATION 0x80000001
|
||||
!define STATUS_DATATYPE_MISALIGNMENT 0x80000002
|
||||
!define STATUS_BREAKPOINT 0x80000003
|
||||
!define STATUS_SINGLE_STEP 0x80000004
|
||||
!define DBG_EXCEPTION_NOT_HANDLED 0x80010001
|
||||
!define STATUS_ACCESS_VIOLATION 0xC0000005
|
||||
!define STATUS_IN_PAGE_ERROR 0xC0000006
|
||||
!define STATUS_INVALID_HANDLE 0xC0000008
|
||||
!define STATUS_NO_MEMORY 0xC0000017
|
||||
!define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
|
||||
!define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
|
||||
!define STATUS_INVALID_DISPOSITION 0xC0000026
|
||||
!define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
|
||||
!define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
|
||||
!define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
|
||||
!define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
|
||||
!define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
|
||||
!define STATUS_FLOAT_OVERFLOW 0xC0000091
|
||||
!define STATUS_FLOAT_STACK_CHECK 0xC0000092
|
||||
!define STATUS_FLOAT_UNDERFLOW 0xC0000093
|
||||
!define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
|
||||
!define STATUS_INTEGER_OVERFLOW 0xC0000095
|
||||
!define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
|
||||
!define STATUS_STACK_OVERFLOW 0xC00000FD
|
||||
!define STATUS_CONTROL_C_EXIT 0xC000013A
|
||||
!define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
|
||||
!define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
|
||||
!define STATUS_REG_NAT_CONSUMPTION 0xC00002C9
|
||||
!define STATUS_SXS_EARLY_DEACTIVATION 0xC015000F
|
||||
!define STATUS_SXS_INVALID_DEACTIVATION 0xC0150010
|
||||
!endif /*WIN32_NO_STATUS*/
|
||||
|
||||
#define MAXIMUM_WAIT_OBJECTS 64
|
||||
|
||||
!define DELETE 0x00010000
|
||||
!define READ_CONTROL 0x00020000
|
||||
!define WRITE_DAC 0x00040000
|
||||
!define WRITE_OWNER 0x00080000
|
||||
!define SYNCHRONIZE 0x00100000
|
||||
!define STANDARD_RIGHTS_REQUIRED 0x000F0000
|
||||
!define STANDARD_RIGHTS_READ ${READ_CONTROL}
|
||||
!define STANDARD_RIGHTS_WRITE ${READ_CONTROL}
|
||||
!define STANDARD_RIGHTS_EXECUTE ${READ_CONTROL}
|
||||
!define STANDARD_RIGHTS_ALL 0x001F0000
|
||||
!define SPECIFIC_RIGHTS_ALL 0x0000FFFF
|
||||
!define ACCESS_SYSTEM_SECURITY 0x01000000
|
||||
!define MAXIMUM_ALLOWED 0x02000000
|
||||
!define GENERIC_READ 0x80000000
|
||||
!define GENERIC_WRITE 0x40000000
|
||||
!define GENERIC_EXECUTE 0x20000000
|
||||
!define GENERIC_ALL 0x10000000
|
||||
|
||||
!define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
|
||||
!define SE_PRIVILEGE_ENABLED 0x00000002
|
||||
!define SE_PRIVILEGE_REMOVED 0x00000004
|
||||
!define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
|
||||
|
||||
!define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege"
|
||||
!define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege"
|
||||
!define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege"
|
||||
!define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege"
|
||||
!define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege"
|
||||
!define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege"
|
||||
!define SE_TCB_NAME "SeTcbPrivilege"
|
||||
!define SE_SECURITY_NAME "SeSecurityPrivilege"
|
||||
!define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege"
|
||||
!define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege"
|
||||
!define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege"
|
||||
!define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege"
|
||||
!define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege"
|
||||
!define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege"
|
||||
!define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege"
|
||||
!define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege"
|
||||
!define SE_BACKUP_NAME "SeBackupPrivilege"
|
||||
!define SE_RESTORE_NAME "SeRestorePrivilege"
|
||||
!define SE_SHUTDOWN_NAME "SeShutdownPrivilege"
|
||||
!define SE_DEBUG_NAME "SeDebugPrivilege"
|
||||
!define SE_AUDIT_NAME "SeAuditPrivilege"
|
||||
!define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege"
|
||||
!define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege"
|
||||
!define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege"
|
||||
!define SE_UNDOCK_NAME "SeUndockPrivilege"
|
||||
!define SE_SYNC_AGENT_NAME "SeSyncAgentPrivilege"
|
||||
!define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege"
|
||||
!define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege"
|
||||
!define SE_IMPERSONATE_NAME "SeImpersonatePrivilege"
|
||||
!define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege"
|
||||
|
||||
!define TOKEN_ASSIGN_PRIMARY 0x0001
|
||||
!define TOKEN_DUPLICATE 0x0002
|
||||
!define TOKEN_IMPERSONATE 0x0004
|
||||
!define TOKEN_QUERY 0x0008
|
||||
!define TOKEN_QUERY_SOURCE 0x0010
|
||||
!define TOKEN_ADJUST_PRIVILEGES 0x0020
|
||||
!define TOKEN_ADJUST_GROUPS 0x0040
|
||||
!define TOKEN_ADJUST_DEFAULT 0x0080
|
||||
!define TOKEN_ADJUST_SESSIONID 0x0100
|
||||
!define TOKEN_ALL_ACCESS_P 0xF00FF
|
||||
!define /math TOKEN_ALL_ACCESS ${TOKEN_ALL_ACCESS_P} | ${TOKEN_ADJUST_SESSIONID}
|
||||
!define /math TOKEN_READ ${STANDARD_RIGHTS_READ} | ${TOKEN_QUERY}
|
||||
!define TOKEN_WRITE 0x200E0 ;(STANDARD_RIGHTS_WRITE|TOKEN_ADJUST_PRIVILEGES|TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_DEFAULT)
|
||||
!define TOKEN_EXECUTE ${STANDARD_RIGHTS_EXECUTE}
|
||||
|
||||
!define PROCESS_TERMINATE 0x0001
|
||||
!define PROCESS_CREATE_THREAD 0x0002
|
||||
!define PROCESS_SET_SESSIONID 0x0004
|
||||
!define PROCESS_VM_OPERATION 0x0008
|
||||
!define PROCESS_VM_READ 0x0010
|
||||
!define PROCESS_VM_WRITE 0x0020
|
||||
!define PROCESS_DUP_HANDLE 0x0040
|
||||
!define PROCESS_CREATE_PROCESS 0x0080
|
||||
!define PROCESS_SET_QUOTA 0x0100
|
||||
!define PROCESS_SET_INFORMATION 0x0200
|
||||
!define PROCESS_QUERY_INFORMATION 0x0400
|
||||
!define PROCESS_SUSPEND_RESUME 0x0800
|
||||
!define PROCESS_ALL_ACCESS 0x1F0FFF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
|
||||
!define THREAD_TERMINATE 0x0001
|
||||
!define THREAD_SUSPEND_RESUME 0x0002
|
||||
!define THREAD_GET_CONTEXT 0x0008
|
||||
!define THREAD_SET_CONTEXT 0x0010
|
||||
!define THREAD_SET_INFORMATION 0x0020
|
||||
!define THREAD_QUERY_INFORMATION 0x0040
|
||||
!define THREAD_SET_THREAD_TOKEN 0x0080
|
||||
!define THREAD_IMPERSONATE 0x0100
|
||||
!define THREAD_DIRECT_IMPERSONATION 0x0200
|
||||
!define THREAD_ALL_ACCESS 0x1F03FF ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
|
||||
!define JOB_OBJECT_ASSIGN_PROCESS 0x0001
|
||||
!define JOB_OBJECT_SET_ATTRIBUTES 0x0002
|
||||
!define JOB_OBJECT_QUERY 0x0004
|
||||
!define JOB_OBJECT_TERMINATE 0x0008
|
||||
!define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
|
||||
!define JOB_OBJECT_ALL_ACCESS 0x1F001F ;(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F )
|
||||
!define EVENT_MODIFY_STATE 0x0002
|
||||
!define EVENT_ALL_ACCESS 0x1F0003 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
|
||||
!define MUTANT_QUERY_STATE 0x0001
|
||||
!define MUTANT_ALL_ACCESS 0x1F0001 ;(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
|
||||
|
||||
!define FILE_SHARE_READ 0x00000001
|
||||
!define FILE_SHARE_WRITE 0x00000002
|
||||
!define FILE_SHARE_DELETE 0x00000004
|
||||
!define FILE_ATTRIBUTE_READONLY 0x00000001
|
||||
!define FILE_ATTRIBUTE_HIDDEN 0x00000002
|
||||
!define FILE_ATTRIBUTE_SYSTEM 0x00000004
|
||||
!define FILE_ATTRIBUTE_DIRECTORY 0x00000010
|
||||
!define FILE_ATTRIBUTE_ARCHIVE 0x00000020
|
||||
!define FILE_ATTRIBUTE_DEVICE 0x00000040
|
||||
!define FILE_ATTRIBUTE_NORMAL 0x00000080
|
||||
!define FILE_ATTRIBUTE_TEMPORARY 0x00000100
|
||||
!define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
|
||||
!define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
|
||||
!define FILE_ATTRIBUTE_COMPRESSED 0x00000800
|
||||
!define FILE_ATTRIBUTE_OFFLINE 0x00001000
|
||||
!define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
|
||||
!define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
|
||||
|
||||
!define DUPLICATE_CLOSE_SOURCE 0x00000001
|
||||
!define DUPLICATE_SAME_ACCESS 0x00000002
|
||||
|
||||
!define VER_PLATFORM_WIN32s 0
|
||||
!define VER_PLATFORM_WIN32_WINDOWS 1
|
||||
!define VER_PLATFORM_WIN32_NT 2
|
||||
|
||||
!ifndef REG_SZ & NSIS_WINDOWS__NO_REGTYPES
|
||||
!define REG_NONE 0
|
||||
!define REG_SZ 1
|
||||
!define REG_EXPAND_SZ 2
|
||||
!define REG_BINARY 3
|
||||
!define REG_DWORD 4
|
||||
!define REG_DWORD_LITTLE_ENDIAN 4
|
||||
!define REG_DWORD_BIG_ENDIAN 5
|
||||
!define REG_LINK 6
|
||||
!define REG_MULTI_SZ 7
|
||||
!endif
|
||||
|
||||
|
||||
!endif /* __WIN_NOINC_WINNT */
|
||||
!verbose pop
|
||||
!endif /* __WIN_WINNT__INC */
|
@ -1,199 +0,0 @@
|
||||
!ifndef __WIN_WINUSER__INC
|
||||
!define __WIN_WINUSER__INC
|
||||
!verbose push
|
||||
!verbose 3
|
||||
!ifndef __WIN_MS_NOUSER & __WIN_NOINC_WINUSER
|
||||
|
||||
!ifndef __WIN_MS_NOVIRTUALKEYCODES
|
||||
!define VK_LBUTTON 0x01
|
||||
!define VK_RBUTTON 0x02
|
||||
!define VK_CANCEL 0x03
|
||||
!define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */
|
||||
!define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */
|
||||
!define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */
|
||||
!define VK_BACK 0x08
|
||||
!define VK_TAB 0x09
|
||||
!define VK_CLEAR 0x0C
|
||||
!define VK_RETURN 0x0D
|
||||
!define VK_SHIFT 0x10
|
||||
!define VK_CONTROL 0x11
|
||||
!define VK_MENU 0x12
|
||||
!define VK_PAUSE 0x13
|
||||
!define VK_CAPITAL 0x14
|
||||
!define VK_ESCAPE 0x1B
|
||||
!define VK_CONVERT 0x1C
|
||||
!define VK_NONCONVERT 0x1D
|
||||
!define VK_ACCEPT 0x1E
|
||||
!define VK_MODECHANGE 0x1F
|
||||
!define VK_SPACE 0x20
|
||||
!define VK_PRIOR 0x21
|
||||
!define VK_NEXT 0x22
|
||||
!define VK_END 0x23
|
||||
!define VK_HOME 0x24
|
||||
!define VK_LEFT 0x25
|
||||
!define VK_UP 0x26
|
||||
!define VK_RIGHT 0x27
|
||||
!define VK_DOWN 0x28
|
||||
!define VK_SELECT 0x29
|
||||
!define VK_PRINT 0x2A
|
||||
!define VK_EXECUTE 0x2B
|
||||
!define VK_SNAPSHOT 0x2C
|
||||
!define VK_INSERT 0x2D
|
||||
!define VK_DELETE 0x2E
|
||||
!define VK_HELP 0x2F
|
||||
; VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
|
||||
; VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
|
||||
!define VK_LWIN 0x5B
|
||||
!define VK_RWIN 0x5C
|
||||
!define VK_APPS 0x5D
|
||||
!define VK_SLEEP 0x5F
|
||||
!define VK_NUMPAD0 0x60
|
||||
!define VK_NUMPAD1 0x61
|
||||
!define VK_NUMPAD2 0x62
|
||||
!define VK_NUMPAD3 0x63
|
||||
!define VK_NUMPAD4 0x64
|
||||
!define VK_NUMPAD5 0x65
|
||||
!define VK_NUMPAD6 0x66
|
||||
!define VK_NUMPAD7 0x67
|
||||
!define VK_NUMPAD8 0x68
|
||||
!define VK_NUMPAD9 0x69
|
||||
!define VK_MULTIPLY 0x6A
|
||||
!define VK_ADD 0x6B
|
||||
!define VK_SEPARATOR 0x6C
|
||||
!define VK_SUBTRACT 0x6D
|
||||
!define VK_DECIMAL 0x6E
|
||||
!define VK_DIVIDE 0x6F
|
||||
!define VK_F1 0x70
|
||||
!define VK_F2 0x71
|
||||
!define VK_F3 0x72
|
||||
!define VK_F4 0x73
|
||||
!define VK_F5 0x74
|
||||
!define VK_F6 0x75
|
||||
!define VK_F7 0x76
|
||||
!define VK_F8 0x77
|
||||
!define VK_F9 0x78
|
||||
!define VK_F10 0x79
|
||||
!define VK_F11 0x7A
|
||||
!define VK_F12 0x7B
|
||||
!define VK_NUMLOCK 0x90
|
||||
!define VK_SCROLL 0x91
|
||||
!define VK_OEM_NEC_EQUAL 0x92 ; '=' key on numpad
|
||||
!define VK_LSHIFT 0xA0
|
||||
!define VK_RSHIFT 0xA1
|
||||
!define VK_LCONTROL 0xA2
|
||||
!define VK_RCONTROL 0xA3
|
||||
!define VK_LMENU 0xA4
|
||||
!define VK_RMENU 0xA5
|
||||
!endif
|
||||
|
||||
!ifndef __WIN_MS_NOWINOFFSETS
|
||||
/* in nsDialogs.nsh...
|
||||
!define GWL_STYLE -16
|
||||
!define GWL_EXSTYLE -20 */
|
||||
!define GWLP_WNDPROC -4
|
||||
!define GWLP_HINSTANCE -6
|
||||
!define GWLP_HWNDPARENT -8
|
||||
!define GWLP_USERDATA -21
|
||||
!define GWLP_ID -12
|
||||
!define DWLP_MSGRESULT 0
|
||||
!define /math DWLP_DLGPROC ${DWLP_MSGRESULT} + ${__WIN_PTRSIZE} ;DWLP_MSGRESULT + sizeof(LRESULT)
|
||||
!define /math DWLP_USER ${DWLP_DLGPROC} + ${__WIN_PTRSIZE} ;DWLP_DLGPROC + sizeof(DLGPROC)
|
||||
!endif
|
||||
|
||||
!ifndef __WIN_MS_NONCMESSAGES
|
||||
!define HTERROR -2
|
||||
!define HTTRANSPARENT -1
|
||||
!define HTNOWHERE 0
|
||||
!define HTCLIENT 1
|
||||
!define HTCAPTION 2
|
||||
!define HTSYSMENU 3
|
||||
!define HTGROWBOX 4
|
||||
!define HTSIZE ${HTGROWBOX}
|
||||
!define HTMENU 5
|
||||
!define HTHSCROLL 6
|
||||
!define HTVSCROLL 7
|
||||
!define HTMINBUTTON 8
|
||||
!define HTMAXBUTTON 9
|
||||
!define HTLEFT 10
|
||||
!define HTRIGHT 11
|
||||
!define HTTOP 12
|
||||
!define HTTOPLEFT 13
|
||||
!define HTTOPRIGHT 14
|
||||
!define HTBOTTOM 15
|
||||
!define HTBOTTOMLEFT 16
|
||||
!define HTBOTTOMRIGHT 17
|
||||
!define HTBORDER 18
|
||||
!define HTREDUCE ${HTMINBUTTON}
|
||||
!define HTZOOM ${HTMAXBUTTON}
|
||||
!define HTSIZEFIRST ${HTLEFT}
|
||||
!define HTSIZELAST ${HTBOTTOMRIGHT}
|
||||
!define HTOBJECT 19
|
||||
!define HTCLOSE 20
|
||||
!define HTHELP 21
|
||||
!endif
|
||||
|
||||
!ifndef __WIN_MS_NOSYSCOMMANDS
|
||||
!define SC_SIZE 0xF000
|
||||
!define SC_MOVE 0xF010
|
||||
!define SC_MINIMIZE 0xF020
|
||||
!define SC_MAXIMIZE 0xF030
|
||||
!define SC_NEXTWINDOW 0xF040
|
||||
!define SC_PREVWINDOW 0xF050
|
||||
!define SC_CLOSE 0xF060
|
||||
!define SC_VSCROLL 0xF070
|
||||
!define SC_HSCROLL 0xF080
|
||||
!define SC_MOUSEMENU 0xF090
|
||||
!define SC_KEYMENU 0xF100
|
||||
!define SC_ARRANGE 0xF110
|
||||
!define SC_RESTORE 0xF120
|
||||
!define SC_TASKLIST 0xF130
|
||||
!define SC_SCREENSAVE 0xF140
|
||||
!define SC_HOTKEY 0xF150
|
||||
!define SC_DEFAULT 0xF160
|
||||
!define SC_MONITORPOWER 0xF170
|
||||
!define SC_CONTEXTHELP 0xF180
|
||||
!define SC_SEPARATOR 0xF00F
|
||||
!endif
|
||||
|
||||
!define IDC_ARROW 32512
|
||||
!define IDC_IBEAM 32513
|
||||
!define IDC_WAIT 32514
|
||||
!define IDC_CROSS 32515
|
||||
!define IDC_UPARROW 32516
|
||||
!define IDC_SIZENWSE 32642
|
||||
!define IDC_SIZENESW 32643
|
||||
!define IDC_SIZEWE 32644
|
||||
!define IDC_SIZENS 32645
|
||||
!define IDC_SIZEALL 32646
|
||||
!define IDC_NO 32648
|
||||
!define IDC_HAND 32649
|
||||
!define IDC_APPSTARTING 32650
|
||||
!define IDC_HELP 32651
|
||||
|
||||
/* in nsDialogs.nsh...
|
||||
!define IMAGE_BITMAP 0
|
||||
!define IMAGE_ICON 1
|
||||
!define IMAGE_CURSOR 2*/
|
||||
|
||||
/* in nsDialogs.nsh...
|
||||
!define LR_DEFAULTCOLOR 0x0000
|
||||
!define LR_MONOCHROME 0x0001
|
||||
!define LR_COLOR 0x0002
|
||||
!define LR_COPYRETURNORG 0x0004
|
||||
!define LR_COPYDELETEORG 0x0008
|
||||
!define LR_LOADFROMFILE 0x0010
|
||||
!define LR_LOADTRANSPARENT 0x0020
|
||||
!define LR_DEFAULTSIZE 0x0040
|
||||
!define LR_VGACOLOR 0x0080
|
||||
!define LR_LOADMAP3DCOLORS 0x1000
|
||||
!define LR_CREATEDIBSECTION 0x2000
|
||||
!define LR_COPYFROMRESOURCE 0x4000
|
||||
!define LR_SHARED 0x8000*/
|
||||
|
||||
!define GA_PARENT 1
|
||||
!define GA_ROOT 2
|
||||
!define GA_ROOTOWNER 3
|
||||
|
||||
!endif /* __WIN_MS_NOUSER & __WIN_NOINC_WINUSER */
|
||||
!verbose pop
|
||||
!endif /* __WIN_WINUSER__INC */
|
@ -1,214 +0,0 @@
|
||||
/*
|
||||
|
||||
WinCore.nsh & Win\*.nsh - Collection of common windows defines
|
||||
|
||||
!define __WIN_NOINC_xxx to exclude a windows header file
|
||||
!define __WIN_MS_xxx to exclude specific things (The original #ifdef xxx checks can be found in the official Microsoft headers)
|
||||
|
||||
*/
|
||||
|
||||
!ifndef __WIN_WINDOWS__INC
|
||||
!define __WIN_WINDOWS__INC
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
|
||||
!define __WIN_PTRSIZE 4 ;will we ever see a 64 bit version?
|
||||
|
||||
|
||||
!include Win\WinDef.nsh
|
||||
!include Win\WinError.nsh
|
||||
!include Win\WinNT.nsh
|
||||
!include Win\WinUser.nsh
|
||||
|
||||
!ifndef __WIN_MS_NOWINMESSAGES
|
||||
!include WinMessages.nsh
|
||||
!endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************
|
||||
WinBase.h
|
||||
**************************************************/
|
||||
!ifndef __WIN_NOINC_WINBASE
|
||||
!define INVALID_HANDLE_VALUE -1
|
||||
!define INVALID_FILE_SIZE 0xFFFFFFFF
|
||||
!define INVALID_SET_FILE_POINTER -1
|
||||
!define INVALID_FILE_ATTRIBUTES -1
|
||||
|
||||
!define WAIT_FAILED 0xFFFFFFFF
|
||||
!define WAIT_OBJECT_0 0 ;((STATUS_WAIT_0 ) + 0 )
|
||||
|
||||
!define WAIT_ABANDONED 0x80 ;((STATUS_ABANDONED_WAIT_0 ) + 0 )
|
||||
!define WAIT_ABANDONED_0 0x80 ;((STATUS_ABANDONED_WAIT_0 ) + 0 )
|
||||
|
||||
!define DRIVE_UNKNOWN 0
|
||||
!define DRIVE_NO_ROOT_DIR 1
|
||||
!define DRIVE_REMOVABLE 2
|
||||
!define DRIVE_FIXED 3
|
||||
!define DRIVE_REMOTE 4
|
||||
!define DRIVE_CDROM 5
|
||||
!define DRIVE_RAMDISK 6
|
||||
|
||||
!define FILE_TYPE_UNKNOWN 0x0000
|
||||
!define FILE_TYPE_DISK 0x0001
|
||||
!define FILE_TYPE_CHAR 0x0002
|
||||
!define FILE_TYPE_PIPE 0x0003
|
||||
!define FILE_TYPE_REMOTE 0x8000
|
||||
|
||||
!define STD_INPUT_HANDLE -10
|
||||
!define STD_OUTPUT_HANDLE -11
|
||||
!define STD_ERROR_HANDLE -12
|
||||
|
||||
#define IGNORE 0 ; Ignore signal
|
||||
!define INFINITE 0xFFFFFFFF ; Infinite timeout
|
||||
|
||||
!endif /* __WIN_NOINC_WINBASE */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************
|
||||
WinGDI.h
|
||||
**************************************************/
|
||||
!ifndef __WIN_MS_NOGDI & __WIN_NOINC_WINGDI
|
||||
!define HORZRES 8
|
||||
!define VERTRES 10
|
||||
!define BITSPIXEL 12
|
||||
!define LOGPIXELSX 88
|
||||
!define LOGPIXELSY 90
|
||||
!define COLORRES 108
|
||||
!define VREFRESH 116
|
||||
!define DESKTOPVERTRES 117
|
||||
!define DESKTOPHORZRES 118
|
||||
!endif /* __WIN_MS_NOGDI & __WIN_NOINC_WINGDI */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************
|
||||
WinReg.h
|
||||
**************************************************/
|
||||
!ifndef __WIN_NOINC_WINREG
|
||||
!ifndef __WIN_NOHKEY & HKEY_CLASSES_ROOT & HKEY_CURRENT_USER & HKEY_LOCAL_MACHINE & HKEY_USERS
|
||||
!define HKEY_CLASSES_ROOT 0x80000000
|
||||
!define HKEY_CURRENT_USER 0x80000001
|
||||
!define HKEY_LOCAL_MACHINE 0x80000002
|
||||
!define HKEY_USERS 0x80000003
|
||||
!define HKEY_PERFORMANCE_DATA 0x80000004
|
||||
!define HKEY_PERFORMANCE_TEXT 0x80000050
|
||||
!define HKEY_PERFORMANCE_NLSTEXT 0x80000060
|
||||
!define HKEY_CURRENT_CONFIG 0x80000005
|
||||
!define HKEY_DYN_DATA 0x80000006
|
||||
!ifndef __WIN_NOSHORTHKEY & HKCR & HKCU & HKLM
|
||||
!define HKCR ${HKEY_CLASSES_ROOT}
|
||||
!define HKCU ${HKEY_CURRENT_USER}
|
||||
!define HKLM ${HKEY_LOCAL_MACHINE}
|
||||
!endif
|
||||
!endif
|
||||
!endif /* __WIN_NOINC_WINREG */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************
|
||||
WindowsX.h
|
||||
**************************************************/
|
||||
!ifndef __WIN_NOINC_WINDOWSX
|
||||
!ifndef GET_X_LPARAM & GET_Y_LPARAM
|
||||
!macro _Win_GET_X_LPARAM _outvar _in
|
||||
IntOp ${_outvar} "${_in}" << 16 ;We can't just use LOWORD, we need to keep the sign,
|
||||
IntOp ${_outvar} ${_outvar} >> 16 ;so we let NSIS sign extend for us
|
||||
!macroend
|
||||
!define GET_X_LPARAM "!insertmacro _Win_GET_X_LPARAM "
|
||||
!macro _Win_GET_Y_LPARAM _outvar _in
|
||||
IntOp ${_outvar} "${_in}" >> 16
|
||||
!macroend
|
||||
!define GET_Y_LPARAM "!insertmacro _Win_GET_Y_LPARAM "
|
||||
!endif
|
||||
!endif /* __WIN_NOINC_WINDOWSX */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************
|
||||
ShlObj.h
|
||||
**************************************************/
|
||||
!ifndef __WIN_NOINC_SHLOBJ
|
||||
!ifndef __WIN_NOSHELLFOLDERCSIDL
|
||||
!define CSIDL_DESKTOP 0x0000
|
||||
!define CSIDL_INTERNET 0x0001 ;Internet Explorer (icon on desktop)
|
||||
!define CSIDL_PROGRAMS 0x0002 ;Start Menu\Programs
|
||||
!define CSIDL_CONTROLS 0x0003 ;My Computer\Control Panel
|
||||
!define CSIDL_PRINTERS 0x0004 ;My Computer\Printers
|
||||
!define CSIDL_PERSONAL 0x0005 ;My Documents
|
||||
!define CSIDL_FAVORITES 0x0006 ;<user name>\Favorites
|
||||
!define CSIDL_STARTUP 0x0007 ;Start Menu\Programs\Startup
|
||||
!define CSIDL_RECENT 0x0008 ;<user name>\Recent
|
||||
!define CSIDL_SENDTO 0x0009 ;<user name>\SendTo
|
||||
!define CSIDL_BITBUCKET 0x000a ;<desktop>\Recycle Bin
|
||||
!define CSIDL_STARTMENU 0x000b ;<user name>\Start Menu
|
||||
!define CSIDL_MYDOCUMENTS 0x000c ;logical "My Documents" desktop icon
|
||||
!define CSIDL_MYMUSIC 0x000d ;"My Music" folder
|
||||
!define CSIDL_MYVIDEO 0x000e ;"My Videos" folder
|
||||
!define CSIDL_DESKTOPDIRECTORY 0x0010 ;<user name>\Desktop
|
||||
!define CSIDL_DRIVES 0x0011 ;My Computer
|
||||
!define CSIDL_NETWORK 0x0012 ;Network Neighborhood
|
||||
!define CSIDL_NETHOOD 0x0013 ;<user name>\nethood
|
||||
!define CSIDL_FONTS 0x0014 ;windows\fonts
|
||||
!define CSIDL_TEMPLATES 0x0015
|
||||
!define CSIDL_COMMON_STARTMENU 0x0016 ;All Users\Start Menu
|
||||
!define CSIDL_COMMON_PROGRAMS 0x0017 ;All Users\Start Menu\Programs
|
||||
!define CSIDL_COMMON_STARTUP 0x0018 ;All Users\Startup
|
||||
!define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 ;All Users\Desktop
|
||||
!define CSIDL_APPDATA 0x001a ;<user name>\Application Data
|
||||
!define CSIDL_PRINTHOOD 0x001b ;<user name>\PrintHood
|
||||
!define CSIDL_LOCAL_APPDATA 0x001c ;<user name>\Local Settings\Applicaiton Data (non roaming)
|
||||
!define CSIDL_ALTSTARTUP 0x001d ;non localized startup
|
||||
!define CSIDL_COMMON_ALTSTARTUP 0x001e ;non localized common startup
|
||||
!define CSIDL_COMMON_FAVORITES 0x001f
|
||||
!define CSIDL_INTERNET_CACHE 0x0020
|
||||
!define CSIDL_COOKIES 0x0021
|
||||
!define CSIDL_HISTORY 0x0022
|
||||
!define CSIDL_COMMON_APPDATA 0x0023 ;All Users\Application Data
|
||||
!define CSIDL_WINDOWS 0x0024 ;GetWindowsDirectory
|
||||
!define CSIDL_SYSTEM 0x0025 ;GetSystemDirectory
|
||||
!define CSIDL_PROGRAM_FILES 0x0026 ;C:\Program Files
|
||||
!define CSIDL_MYPICTURES 0x0027
|
||||
!define CSIDL_PROFILE 0x0028 ;USERPROFILE
|
||||
!define CSIDL_SYSTEMX86 0x0029 ;x86 system directory on RISC
|
||||
!define CSIDL_PROGRAM_FILESX86 0x002a ;x86 C:\Program Files on RISC
|
||||
!define CSIDL_PROGRAM_FILES_COMMON 0x002b ;C:\Program Files\Common
|
||||
!define CSIDL_PROGRAM_FILES_COMMONX86 0x002c ;x86 Program Files\Common on RISC
|
||||
!define CSIDL_COMMON_TEMPLATES 0x002d ;All Users\Templates
|
||||
!define CSIDL_COMMON_DOCUMENTS 0x002e ;All Users\Documents
|
||||
!define CSIDL_COMMON_ADMINTOOLS 0x002f ;All Users\Start Menu\Programs\Administrative Tools
|
||||
!define CSIDL_ADMINTOOLS 0x0030 ;<user name>\Start Menu\Programs\Administrative Tools
|
||||
!define CSIDL_CONNECTIONS 0x0031 ;Network and Dial-up Connections
|
||||
!define CSIDL_COMMON_MUSIC 0x0035 ;All Users\My Music
|
||||
!define CSIDL_COMMON_PICTURES 0x0036 ;All Users\My Pictures
|
||||
!define CSIDL_COMMON_VIDEO 0x0037 ;All Users\My Video
|
||||
!define CSIDL_RESOURCES 0x0038 ;Resource Direcotry
|
||||
!define CSIDL_RESOURCES_LOCALIZED 0x0039 ;Localized Resource Direcotry
|
||||
!define CSIDL_COMMON_OEM_LINKS 0x003a ;Links to All Users OEM specific apps
|
||||
!define CSIDL_CDBURN_AREA 0x003b ;USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
|
||||
!define CSIDL_COMPUTERSNEARME 0x003d ;Computers Near Me (computered from Workgroup membership)
|
||||
!define CSIDL_FLAG_CREATE 0x8000 ;combine with CSIDL_ value to force folder creation in SHGetFolderPath()
|
||||
!define CSIDL_FLAG_DONT_VERIFY 0x4000 ;combine with CSIDL_ value to return an unverified folder path
|
||||
!define CSIDL_FLAG_NO_ALIAS 0x1000 ;combine with CSIDL_ value to insure non-alias versions of the pidl
|
||||
!define CSIDL_FLAG_PER_USER_INIT 0x0800 ;combine with CSIDL_ value to indicate per-user init (eg. upgrade)
|
||||
!define CSIDL_FLAG_MASK 0xFF00
|
||||
!endif /* __WIN_NOSHELLFOLDERCSIDL */
|
||||
!endif /* __WIN_NOINC_SHLOBJ */
|
||||
|
||||
|
||||
|
||||
|
||||
!verbose pop
|
||||
!endif /* __WIN_WINDOWS__INC */
|
@ -1,592 +0,0 @@
|
||||
/*
|
||||
_____________________________________________________________________________
|
||||
|
||||
List of common Windows Messages
|
||||
_____________________________________________________________________________
|
||||
|
||||
2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
|
||||
|
||||
|
||||
Usage example:
|
||||
---------------------------------------------------
|
||||
Name "Output"
|
||||
OutFile "Output.exe"
|
||||
|
||||
!include "WinMessages.nsh"
|
||||
|
||||
Section
|
||||
FindWindow $0 '#32770' '' $HWNDPARENT
|
||||
GetDlgItem $1 $0 1027
|
||||
SendMessage $1 ${WM_SETTEXT} 0 'STR:MyText'
|
||||
SectionEnd
|
||||
---------------------------------------------------
|
||||
|
||||
|
||||
Prefix Message category
|
||||
-------------------------
|
||||
SW ShowWindow Commands
|
||||
BM Button control
|
||||
CB Combo box control
|
||||
EM Edit control
|
||||
LB List box control
|
||||
WM General window
|
||||
ABM Application desktop toolbar
|
||||
DBT Device
|
||||
DM Default push button control
|
||||
HDM Header control
|
||||
LVM List view control
|
||||
SB Status bar window
|
||||
SBM Scroll bar control
|
||||
STM Static control
|
||||
TCM Tab control
|
||||
PBM Progress bar
|
||||
-----------------------------------
|
||||
|
||||
NOT included messages (WM_USER + X)
|
||||
-----------------------------------
|
||||
CBEM Extended combo box control
|
||||
CDM Common dialog box
|
||||
DL Drag list box
|
||||
DTM Date and time picker control
|
||||
HKM Hot key control
|
||||
IPM IP address control
|
||||
MCM Month calendar control
|
||||
PGM Pager control
|
||||
PSM Property sheet
|
||||
RB Rebar control
|
||||
TB Toolbar
|
||||
TBM Trackbar
|
||||
TTM Tooltip control
|
||||
TVM Tree-view control
|
||||
UDM Up-down control
|
||||
-----------------------------------
|
||||
*/
|
||||
|
||||
|
||||
!ifndef WINMESSAGES_INCLUDED
|
||||
!define WINMESSAGES_INCLUDED
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!define HWND_BROADCAST 0xFFFF
|
||||
|
||||
#ShowWindow Commands#
|
||||
!define SW_HIDE 0
|
||||
!define SW_SHOWNORMAL 1
|
||||
!define SW_NORMAL 1
|
||||
!define SW_SHOWMINIMIZED 2
|
||||
!define SW_SHOWMAXIMIZED 3
|
||||
!define SW_MAXIMIZE 3
|
||||
!define SW_SHOWNOACTIVATE 4
|
||||
!define SW_SHOW 5
|
||||
!define SW_MINIMIZE 6
|
||||
!define SW_SHOWMINNOACTIVE 7
|
||||
!define SW_SHOWNA 8
|
||||
!define SW_RESTORE 9
|
||||
!define SW_SHOWDEFAULT 10
|
||||
!define SW_FORCEMINIMIZE 11
|
||||
!define SW_MAX 11
|
||||
|
||||
#Button Control Messages#
|
||||
!define BM_CLICK 0x00F5
|
||||
!define BM_GETCHECK 0x00F0
|
||||
!define BM_GETIMAGE 0x00F6
|
||||
!define BM_GETSTATE 0x00F2
|
||||
!define BM_SETCHECK 0x00F1
|
||||
!define BM_SETIMAGE 0x00F7
|
||||
!define BM_SETSTATE 0x00F3
|
||||
!define BM_SETSTYLE 0x00F4
|
||||
|
||||
!define BST_UNCHECKED 0
|
||||
!define BST_CHECKED 1
|
||||
!define BST_INDETERMINATE 2
|
||||
!define BST_PUSHED 4
|
||||
!define BST_FOCUS 8
|
||||
|
||||
#Combo Box Messages#
|
||||
!define CB_ADDSTRING 0x0143
|
||||
!define CB_DELETESTRING 0x0144
|
||||
!define CB_DIR 0x0145
|
||||
!define CB_FINDSTRING 0x014C
|
||||
!define CB_FINDSTRINGEXACT 0x0158
|
||||
!define CB_GETCOUNT 0x0146
|
||||
!define CB_GETCURSEL 0x0147
|
||||
!define CB_GETDROPPEDCONTROLRECT 0x0152
|
||||
!define CB_GETDROPPEDSTATE 0x0157
|
||||
!define CB_GETDROPPEDWIDTH 0x015f
|
||||
!define CB_GETEDITSEL 0x0140
|
||||
!define CB_GETEXTENDEDUI 0x0156
|
||||
!define CB_GETHORIZONTALEXTENT 0x015d
|
||||
!define CB_GETITEMDATA 0x0150
|
||||
!define CB_GETITEMHEIGHT 0x0154
|
||||
!define CB_GETLBTEXT 0x0148
|
||||
!define CB_GETLBTEXTLEN 0x0149
|
||||
!define CB_GETLOCALE 0x015A
|
||||
!define CB_GETTOPINDEX 0x015b
|
||||
!define CB_INITSTORAGE 0x0161
|
||||
!define CB_INSERTSTRING 0x014A
|
||||
!define CB_LIMITTEXT 0x0141
|
||||
!define CB_MSGMAX 0x015B # 0x0162 0x0163
|
||||
!define CB_MULTIPLEADDSTRING 0x0163
|
||||
!define CB_RESETCONTENT 0x014B
|
||||
!define CB_SELECTSTRING 0x014D
|
||||
!define CB_SETCURSEL 0x014E
|
||||
!define CB_SETDROPPEDWIDTH 0x0160
|
||||
!define CB_SETEDITSEL 0x0142
|
||||
!define CB_SETEXTENDEDUI 0x0155
|
||||
!define CB_SETHORIZONTALEXTENT 0x015e
|
||||
!define CB_SETITEMDATA 0x0151
|
||||
!define CB_SETITEMHEIGHT 0x0153
|
||||
!define CB_SETLOCALE 0x0159
|
||||
!define CB_SETTOPINDEX 0x015c
|
||||
!define CB_SHOWDROPDOWN 0x014F
|
||||
|
||||
!define CB_ERR -1
|
||||
|
||||
#Edit Control Messages#
|
||||
!define EM_CANUNDO 0x00C6
|
||||
!define EM_CHARFROMPOS 0x00D7
|
||||
!define EM_EMPTYUNDOBUFFER 0x00CD
|
||||
!define EM_EXLIMITTEXT 0x0435
|
||||
!define EM_FMTLINES 0x00C8
|
||||
!define EM_GETFIRSTVISIBLELINE 0x00CE
|
||||
!define EM_GETHANDLE 0x00BD
|
||||
!define EM_GETIMESTATUS 0x00D9
|
||||
!define EM_GETLIMITTEXT 0x00D5
|
||||
!define EM_GETLINE 0x00C4
|
||||
!define EM_GETLINECOUNT 0x00BA
|
||||
!define EM_GETMARGINS 0x00D4
|
||||
!define EM_GETMODIFY 0x00B8
|
||||
!define EM_GETPASSWORDCHAR 0x00D2
|
||||
!define EM_GETRECT 0x00B2
|
||||
!define EM_GETSEL 0x00B0
|
||||
!define EM_GETTHUMB 0x00BE
|
||||
!define EM_GETWORDBREAKPROC 0x00D1
|
||||
!define EM_LIMITTEXT 0x00C5
|
||||
!define EM_LINEFROMCHAR 0x00C9
|
||||
!define EM_LINEINDEX 0x00BB
|
||||
!define EM_LINELENGTH 0x00C1
|
||||
!define EM_LINESCROLL 0x00B6
|
||||
!define EM_POSFROMCHAR 0x00D6
|
||||
!define EM_REPLACESEL 0x00C2
|
||||
!define EM_SCROLL 0x00B5
|
||||
!define EM_SCROLLCARET 0x00B7
|
||||
!define EM_SETHANDLE 0x00BC
|
||||
!define EM_SETIMESTATUS 0x00D8
|
||||
!define EM_SETLIMITTEXT 0x00C5 # Same as EM_LIMITTEXT
|
||||
!define EM_SETMARGINS 0x00D3
|
||||
!define EM_SETMODIFY 0x00B9
|
||||
!define EM_SETPASSWORDCHAR 0x00CC
|
||||
!define EM_SETREADONLY 0x00CF
|
||||
!define EM_SETRECT 0x00B3
|
||||
!define EM_SETRECTNP 0x00B4
|
||||
!define EM_SETSEL 0x00B1
|
||||
!define EM_SETTABSTOPS 0x00CB
|
||||
!define EM_SETWORDBREAKPROC 0x00D0
|
||||
!define EM_UNDO 0x00C7
|
||||
|
||||
#Listbox Messages#
|
||||
!define LB_ADDFILE 0x0196
|
||||
!define LB_ADDSTRING 0x0180
|
||||
!define LB_DELETESTRING 0x0182
|
||||
!define LB_DIR 0x018D
|
||||
!define LB_FINDSTRING 0x018F
|
||||
!define LB_FINDSTRINGEXACT 0x01A2
|
||||
!define LB_GETANCHORINDEX 0x019D
|
||||
!define LB_GETCARETINDEX 0x019F
|
||||
!define LB_GETCOUNT 0x018B
|
||||
!define LB_GETCURSEL 0x0188
|
||||
!define LB_GETHORIZONTALEXTENT 0x0193
|
||||
!define LB_GETITEMDATA 0x0199
|
||||
!define LB_GETITEMHEIGHT 0x01A1
|
||||
!define LB_GETITEMRECT 0x0198
|
||||
!define LB_GETLOCALE 0x01A6
|
||||
!define LB_GETSEL 0x0187
|
||||
!define LB_GETSELCOUNT 0x0190
|
||||
!define LB_GETSELITEMS 0x0191
|
||||
!define LB_GETTEXT 0x0189
|
||||
!define LB_GETTEXTLEN 0x018A
|
||||
!define LB_GETTOPINDEX 0x018E
|
||||
!define LB_INITSTORAGE 0x01A8
|
||||
!define LB_INSERTSTRING 0x0181
|
||||
!define LB_ITEMFROMPOINT 0x01A9
|
||||
!define LB_MSGMAX 0x01A8 # 0x01B0 0x01B1
|
||||
!define LB_MULTIPLEADDSTRING 0x01B1
|
||||
!define LB_RESETCONTENT 0x0184
|
||||
!define LB_SELECTSTRING 0x018C
|
||||
!define LB_SELITEMRANGE 0x019B
|
||||
!define LB_SELITEMRANGEEX 0x0183
|
||||
!define LB_SETANCHORINDEX 0x019C
|
||||
!define LB_SETCARETINDEX 0x019E
|
||||
!define LB_SETCOLUMNWIDTH 0x0195
|
||||
!define LB_SETCOUNT 0x01A7
|
||||
!define LB_SETCURSEL 0x0186
|
||||
!define LB_SETHORIZONTALEXTENT 0x0194
|
||||
!define LB_SETITEMDATA 0x019A
|
||||
!define LB_SETITEMHEIGHT 0x01A0
|
||||
!define LB_SETLOCALE 0x01A5
|
||||
!define LB_SETSEL 0x0185
|
||||
!define LB_SETTABSTOPS 0x0192
|
||||
!define LB_SETTOPINDEX 0x0197
|
||||
|
||||
!define LB_ERR -1
|
||||
|
||||
#Window Messages#
|
||||
!define WM_ACTIVATE 0x0006
|
||||
!define WM_ACTIVATEAPP 0x001C
|
||||
!define WM_AFXFIRST 0x0360
|
||||
!define WM_AFXLAST 0x037F
|
||||
!define WM_APP 0x8000
|
||||
!define WM_APPCOMMAND 0x0319
|
||||
!define WM_ASKCBFORMATNAME 0x030C
|
||||
!define WM_CANCELJOURNAL 0x004B
|
||||
!define WM_CANCELMODE 0x001F
|
||||
!define WM_CAPTURECHANGED 0x0215
|
||||
!define WM_CHANGECBCHAIN 0x030D
|
||||
!define WM_CHANGEUISTATE 0x0127
|
||||
!define WM_CHAR 0x0102
|
||||
!define WM_CHARTOITEM 0x002F
|
||||
!define WM_CHILDACTIVATE 0x0022
|
||||
!define WM_CLEAR 0x0303
|
||||
!define WM_CLOSE 0x0010
|
||||
!define WM_COMMAND 0x0111
|
||||
!define WM_COMMNOTIFY 0x0044 # no longer suported
|
||||
!define WM_COMPACTING 0x0041
|
||||
!define WM_COMPAREITEM 0x0039
|
||||
!define WM_CONTEXTMENU 0x007B
|
||||
!define WM_CONVERTREQUESTEX 0x108
|
||||
!define WM_COPY 0x0301
|
||||
!define WM_COPYDATA 0x004A
|
||||
!define WM_CREATE 0x0001
|
||||
!define WM_CTLCOLOR 0x0019
|
||||
!define WM_CTLCOLORBTN 0x0135
|
||||
!define WM_CTLCOLORDLG 0x0136
|
||||
!define WM_CTLCOLOREDIT 0x0133
|
||||
!define WM_CTLCOLORLISTBOX 0x0134
|
||||
!define WM_CTLCOLORMSGBOX 0x0132
|
||||
!define WM_CTLCOLORSCROLLBAR 0x0137
|
||||
!define WM_CTLCOLORSTATIC 0x0138
|
||||
!define WM_CUT 0x0300
|
||||
!define WM_DDE_FIRST 0x3E0
|
||||
!define WM_DEADCHAR 0x0103
|
||||
!define WM_DELETEITEM 0x002D
|
||||
!define WM_DESTROY 0x0002
|
||||
!define WM_DESTROYCLIPBOARD 0x0307
|
||||
!define WM_DEVICECHANGE 0x0219
|
||||
!define WM_DEVMODECHANGE 0x001B
|
||||
!define WM_DISPLAYCHANGE 0x007E
|
||||
!define WM_DRAWCLIPBOARD 0x0308
|
||||
!define WM_DRAWITEM 0x002B
|
||||
!define WM_DROPFILES 0x0233
|
||||
!define WM_ENABLE 0x000A
|
||||
!define WM_ENDSESSION 0x0016
|
||||
!define WM_ENTERIDLE 0x0121
|
||||
!define WM_ENTERMENULOOP 0x0211
|
||||
!define WM_ENTERSIZEMOVE 0x0231
|
||||
!define WM_ERASEBKGND 0x0014
|
||||
!define WM_EXITMENULOOP 0x0212
|
||||
!define WM_EXITSIZEMOVE 0x0232
|
||||
!define WM_FONTCHANGE 0x001D
|
||||
!define WM_GETDLGCODE 0x0087
|
||||
!define WM_GETFONT 0x0031
|
||||
!define WM_GETHOTKEY 0x0033
|
||||
!define WM_GETICON 0x007F
|
||||
!define WM_GETMINMAXINFO 0x0024
|
||||
!define WM_GETOBJECT 0x003D
|
||||
!define WM_GETTEXT 0x000D
|
||||
!define WM_GETTEXTLENGTH 0x000E
|
||||
!define WM_HANDHELDFIRST 0x0358
|
||||
!define WM_HANDHELDLAST 0x035F
|
||||
!define WM_HELP 0x0053
|
||||
!define WM_HOTKEY 0x0312
|
||||
!define WM_HSCROLL 0x0114
|
||||
!define WM_HSCROLLCLIPBOARD 0x030E
|
||||
!define WM_ICONERASEBKGND 0x0027
|
||||
!define WM_IME_CHAR 0x0286
|
||||
!define WM_IME_COMPOSITION 0x010F
|
||||
!define WM_IME_COMPOSITIONFULL 0x0284
|
||||
!define WM_IME_CONTROL 0x0283
|
||||
!define WM_IME_ENDCOMPOSITION 0x010E
|
||||
!define WM_IME_KEYDOWN 0x0290
|
||||
!define WM_IME_KEYLAST 0x010F
|
||||
!define WM_IME_KEYUP 0x0291
|
||||
!define WM_IME_NOTIFY 0x0282
|
||||
!define WM_IME_REQUEST 0x0288
|
||||
!define WM_IME_SELECT 0x0285
|
||||
!define WM_IME_SETCONTEXT 0x0281
|
||||
!define WM_IME_STARTCOMPOSITION 0x010D
|
||||
!define WM_INITDIALOG 0x0110
|
||||
!define WM_INITMENU 0x0116
|
||||
!define WM_INITMENUPOPUP 0x0117
|
||||
!define WM_INPUT 0x00FF
|
||||
!define WM_INPUTLANGCHANGE 0x0051
|
||||
!define WM_INPUTLANGCHANGEREQUEST 0x0050
|
||||
!define WM_KEYDOWN 0x0100
|
||||
!define WM_KEYFIRST 0x0100
|
||||
!define WM_KEYLAST 0x0108
|
||||
!define WM_KEYUP 0x0101
|
||||
!define WM_KILLFOCUS 0x0008
|
||||
!define WM_LBUTTONDBLCLK 0x0203
|
||||
!define WM_LBUTTONDOWN 0x0201
|
||||
!define WM_LBUTTONUP 0x0202
|
||||
!define WM_MBUTTONDBLCLK 0x0209
|
||||
!define WM_MBUTTONDOWN 0x0207
|
||||
!define WM_MBUTTONUP 0x0208
|
||||
!define WM_MDIACTIVATE 0x0222
|
||||
!define WM_MDICASCADE 0x0227
|
||||
!define WM_MDICREATE 0x0220
|
||||
!define WM_MDIDESTROY 0x0221
|
||||
!define WM_MDIGETACTIVE 0x0229
|
||||
!define WM_MDIICONARRANGE 0x0228
|
||||
!define WM_MDIMAXIMIZE 0x0225
|
||||
!define WM_MDINEXT 0x0224
|
||||
!define WM_MDIREFRESHMENU 0x0234
|
||||
!define WM_MDIRESTORE 0x0223
|
||||
!define WM_MDISETMENU 0x0230
|
||||
!define WM_MDITILE 0x0226
|
||||
!define WM_MEASUREITEM 0x002C
|
||||
!define WM_MENUCHAR 0x0120
|
||||
!define WM_MENUCOMMAND 0x0126
|
||||
!define WM_MENUDRAG 0x0123
|
||||
!define WM_MENUGETOBJECT 0x0124
|
||||
!define WM_MENURBUTTONUP 0x0122
|
||||
!define WM_MENUSELECT 0x011F
|
||||
!define WM_MOUSEACTIVATE 0x0021
|
||||
!define WM_MOUSEFIRST 0x0200
|
||||
!define WM_MOUSEHOVER 0x02A1
|
||||
!define WM_MOUSELAST 0x0209 # 0x020A 0x020D
|
||||
!define WM_MOUSELEAVE 0x02A3
|
||||
!define WM_MOUSEMOVE 0x0200
|
||||
!define WM_MOUSEWHEEL 0x020A
|
||||
!define WM_MOVE 0x0003
|
||||
!define WM_MOVING 0x0216
|
||||
!define WM_NCACTIVATE 0x0086
|
||||
!define WM_NCCALCSIZE 0x0083
|
||||
!define WM_NCCREATE 0x0081
|
||||
!define WM_NCDESTROY 0x0082
|
||||
!define WM_NCHITTEST 0x0084
|
||||
!define WM_NCLBUTTONDBLCLK 0x00A3
|
||||
!define WM_NCLBUTTONDOWN 0x00A1
|
||||
!define WM_NCLBUTTONUP 0x00A2
|
||||
!define WM_NCMBUTTONDBLCLK 0x00A9
|
||||
!define WM_NCMBUTTONDOWN 0x00A7
|
||||
!define WM_NCMBUTTONUP 0x00A8
|
||||
!define WM_NCMOUSEHOVER 0x02A0
|
||||
!define WM_NCMOUSELEAVE 0x02A2
|
||||
!define WM_NCMOUSEMOVE 0x00A0
|
||||
!define WM_NCPAINT 0x0085
|
||||
!define WM_NCRBUTTONDBLCLK 0x00A6
|
||||
!define WM_NCRBUTTONDOWN 0x00A4
|
||||
!define WM_NCRBUTTONUP 0x00A5
|
||||
!define WM_NCXBUTTONDBLCLK 0x00AD
|
||||
!define WM_NCXBUTTONDOWN 0x00AB
|
||||
!define WM_NCXBUTTONUP 0x00AC
|
||||
!define WM_NEXTDLGCTL 0x0028
|
||||
!define WM_NEXTMENU 0x0213
|
||||
!define WM_NOTIFY 0x004E
|
||||
!define WM_NOTIFYFORMAT 0x0055
|
||||
!define WM_NULL 0x0000
|
||||
!define WM_PAINT 0x000F
|
||||
!define WM_PAINTCLIPBOARD 0x0309
|
||||
!define WM_PAINTICON 0x0026
|
||||
!define WM_PALETTECHANGED 0x0311
|
||||
!define WM_PALETTEISCHANGING 0x0310
|
||||
!define WM_PARENTNOTIFY 0x0210
|
||||
!define WM_PASTE 0x0302
|
||||
!define WM_PENWINFIRST 0x0380
|
||||
!define WM_PENWINLAST 0x038F
|
||||
!define WM_POWER 0x0048
|
||||
!define WM_POWERBROADCAST 0x0218
|
||||
!define WM_PRINT 0x0317
|
||||
!define WM_PRINTCLIENT 0x0318
|
||||
!define WM_QUERYDRAGICON 0x0037
|
||||
!define WM_QUERYENDSESSION 0x0011
|
||||
!define WM_QUERYNEWPALETTE 0x030F
|
||||
!define WM_QUERYOPEN 0x0013
|
||||
!define WM_QUERYUISTATE 0x0129
|
||||
!define WM_QUEUESYNC 0x0023
|
||||
!define WM_QUIT 0x0012
|
||||
!define WM_RBUTTONDBLCLK 0x0206
|
||||
!define WM_RBUTTONDOWN 0x0204
|
||||
!define WM_RBUTTONUP 0x0205
|
||||
!define WM_RASDIALEVENT 0xCCCD
|
||||
!define WM_RENDERALLFORMATS 0x0306
|
||||
!define WM_RENDERFORMAT 0x0305
|
||||
!define WM_SETCURSOR 0x0020
|
||||
!define WM_SETFOCUS 0x0007
|
||||
!define WM_SETFONT 0x0030
|
||||
!define WM_SETHOTKEY 0x0032
|
||||
!define WM_SETICON 0x0080
|
||||
!define WM_SETREDRAW 0x000B
|
||||
!define WM_SETTEXT 0x000C
|
||||
!define WM_SETTINGCHANGE 0x001A # Same as WM_WININICHANGE
|
||||
!define WM_SHOWWINDOW 0x0018
|
||||
!define WM_SIZE 0x0005
|
||||
!define WM_SIZECLIPBOARD 0x030B
|
||||
!define WM_SIZING 0x0214
|
||||
!define WM_SPOOLERSTATUS 0x002A
|
||||
!define WM_STYLECHANGED 0x007D
|
||||
!define WM_STYLECHANGING 0x007C
|
||||
!define WM_SYNCPAINT 0x0088
|
||||
!define WM_SYSCHAR 0x0106
|
||||
!define WM_SYSCOLORCHANGE 0x0015
|
||||
!define WM_SYSCOMMAND 0x0112
|
||||
!define WM_SYSDEADCHAR 0x0107
|
||||
!define WM_SYSKEYDOWN 0x0104
|
||||
!define WM_SYSKEYUP 0x0105
|
||||
!define WM_TABLET_FIRST 0x02C0
|
||||
!define WM_TABLET_LAST 0x02DF
|
||||
!define WM_THEMECHANGED 0x031A
|
||||
!define WM_TCARD 0x0052
|
||||
!define WM_TIMECHANGE 0x001E
|
||||
!define WM_TIMER 0x0113
|
||||
!define WM_UNDO 0x0304
|
||||
!define WM_UNICHAR 0x0109
|
||||
!define WM_UNINITMENUPOPUP 0x0125
|
||||
!define WM_UPDATEUISTATE 0x0128
|
||||
!define WM_USER 0x400
|
||||
!define WM_USERCHANGED 0x0054
|
||||
!define WM_VKEYTOITEM 0x002E
|
||||
!define WM_VSCROLL 0x0115
|
||||
!define WM_VSCROLLCLIPBOARD 0x030A
|
||||
!define WM_WINDOWPOSCHANGED 0x0047
|
||||
!define WM_WINDOWPOSCHANGING 0x0046
|
||||
!define WM_WININICHANGE 0x001A
|
||||
!define WM_WTSSESSION_CHANGE 0x02B1
|
||||
!define WM_XBUTTONDBLCLK 0x020D
|
||||
!define WM_XBUTTONDOWN 0x020B
|
||||
!define WM_XBUTTONUP 0x020C
|
||||
|
||||
|
||||
#Application desktop toolbar#
|
||||
!define ABM_ACTIVATE 0x00000006 # lParam == TRUE/FALSE means activate/deactivate
|
||||
!define ABM_GETAUTOHIDEBAR 0x00000007
|
||||
!define ABM_GETSTATE 0x00000004
|
||||
!define ABM_GETTASKBARPOS 0x00000005
|
||||
!define ABM_NEW 0x00000000
|
||||
!define ABM_QUERYPOS 0x00000002
|
||||
!define ABM_REMOVE 0x00000001
|
||||
!define ABM_SETAUTOHIDEBAR 0x00000008 # This can fail, you MUST check the result
|
||||
!define ABM_SETPOS 0x00000003
|
||||
!define ABM_WINDOWPOSCHANGED 0x0000009
|
||||
|
||||
#Device#
|
||||
!define DBT_APPYBEGIN 0x0000
|
||||
!define DBT_APPYEND 0x0001
|
||||
!define DBT_CONFIGCHANGECANCELED 0x0019
|
||||
!define DBT_CONFIGCHANGED 0x0018
|
||||
!define DBT_CONFIGMGAPI32 0x0022
|
||||
!define DBT_CONFIGMGPRIVATE 0x7FFF
|
||||
!define DBT_CUSTOMEVENT 0x8006 # User-defined event
|
||||
!define DBT_DEVICEARRIVAL 0x8000 # System detected a new device
|
||||
!define DBT_DEVICEQUERYREMOVE 0x8001 # Wants to remove, may fail
|
||||
!define DBT_DEVICEQUERYREMOVEFAILED 0x8002 # Removal aborted
|
||||
!define DBT_DEVICEREMOVECOMPLETE 0x8004 # Device is gone
|
||||
!define DBT_DEVICEREMOVEPENDING 0x8003 # About to remove, still avail.
|
||||
!define DBT_DEVICETYPESPECIFIC 0x8005 # Type specific event
|
||||
!define DBT_DEVNODES_CHANGED 0x0007
|
||||
!define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 # Device interface class
|
||||
!define DBT_DEVTYP_DEVNODE 0x00000001 # Devnode number
|
||||
!define DBT_DEVTYP_HANDLE 0x00000006 # File system handle
|
||||
!define DBT_DEVTYP_NET 0x00000004 # Network resource
|
||||
!define DBT_DEVTYP_OEM 0x00000000 # Oem-defined device type
|
||||
!define DBT_DEVTYP_PORT 0x00000003 # Serial, parallel
|
||||
!define DBT_DEVTYP_VOLUME 0x00000002 # Logical volume
|
||||
!define DBT_LOW_DISK_SPACE 0x0048
|
||||
!define DBT_MONITORCHANGE 0x001B
|
||||
!define DBT_NO_DISK_SPACE 0x0047
|
||||
!define DBT_QUERYCHANGECONFIG 0x0017
|
||||
!define DBT_SHELLLOGGEDON 0x0020
|
||||
!define DBT_USERDEFINED 0xFFFF
|
||||
!define DBT_VOLLOCKLOCKFAILED 0x8043
|
||||
!define DBT_VOLLOCKLOCKRELEASED 0x8045
|
||||
!define DBT_VOLLOCKLOCKTAKEN 0x8042
|
||||
!define DBT_VOLLOCKQUERYLOCK 0x8041
|
||||
!define DBT_VOLLOCKQUERYUNLOCK 0x8044
|
||||
!define DBT_VOLLOCKUNLOCKFAILED 0x8046
|
||||
!define DBT_VPOWERDAPI 0x8100 # VPOWERD API for Win95
|
||||
!define DBT_VXDINITCOMPLETE 0x0023
|
||||
|
||||
#Default push button control#
|
||||
!define DM_BITSPERPEL 0x00040000
|
||||
!define DM_COLLATE 0x00008000
|
||||
!define DM_COLOR 0x00000800
|
||||
!define DM_COPIES 0x00000100
|
||||
!define DM_DEFAULTSOURCE 0x00000200
|
||||
!define DM_DISPLAYFLAGS 0x00200000
|
||||
!define DM_DISPLAYFREQUENCY 0x00400000
|
||||
!define DM_DITHERTYPE 0x04000000
|
||||
!define DM_DUPLEX 0x00001000
|
||||
!define DM_FORMNAME 0x00010000
|
||||
!define DM_GRAYSCALE 0x00000001 # This flag is no longer valid
|
||||
!define DM_ICMINTENT 0x01000000
|
||||
!define DM_ICMMETHOD 0x00800000
|
||||
!define DM_INTERLACED 0x00000002 # This flag is no longer valid
|
||||
!define DM_LOGPIXELS 0x00020000
|
||||
!define DM_MEDIATYPE 0x02000000
|
||||
!define DM_NUP 0x00000040
|
||||
!define DM_ORIENTATION 0x00000001
|
||||
!define DM_PANNINGHEIGHT 0x10000000
|
||||
!define DM_PANNINGWIDTH 0x08000000
|
||||
!define DM_PAPERLENGTH 0x00000004
|
||||
!define DM_PAPERSIZE 0x00000002
|
||||
!define DM_PAPERWIDTH 0x00000008
|
||||
!define DM_PELSHEIGHT 0x00100000
|
||||
!define DM_PELSWIDTH 0x00080000
|
||||
!define DM_POSITION 0x00000020
|
||||
!define DM_PRINTQUALITY 0x00000400
|
||||
!define DM_SCALE 0x00000010
|
||||
!define DM_SPECVERSION 0x0320 # 0x0400 0x0401
|
||||
!define DM_TTOPTION 0x00004000
|
||||
!define DM_YRESOLUTION 0x00002000
|
||||
|
||||
#Header control#
|
||||
!define HDM_FIRST 0x1200
|
||||
|
||||
#List view control#
|
||||
!define LVM_FIRST 0x1000
|
||||
|
||||
#Status bar window#
|
||||
!define SB_CONST_ALPHA 0x00000001
|
||||
!define SB_GRAD_RECT 0x00000010
|
||||
!define SB_GRAD_TRI 0x00000020
|
||||
!define SB_NONE 0x00000000
|
||||
!define SB_PIXEL_ALPHA 0x00000002
|
||||
!define SB_PREMULT_ALPHA 0x00000004
|
||||
!define SB_SIMPLEID 0x00ff
|
||||
|
||||
#Scroll bar control#
|
||||
!define SBM_ENABLE_ARROWS 0x00E4 # Not in win3.1
|
||||
!define SBM_GETPOS 0x00E1 # Not in win3.1
|
||||
!define SBM_GETRANGE 0x00E3 # Not in win3.1
|
||||
!define SBM_GETSCROLLINFO 0x00EA
|
||||
!define SBM_SETPOS 0x00E0 # Not in win3.1
|
||||
!define SBM_SETRANGE 0x00E2 # Not in win3.1
|
||||
!define SBM_SETRANGEREDRAW 0x00E6 # Not in win3.1
|
||||
!define SBM_SETSCROLLINFO 0x00E9
|
||||
|
||||
#Static control#
|
||||
!define STM_GETICON 0x0171
|
||||
!define STM_GETIMAGE 0x0173
|
||||
!define STM_MSGMAX 0x0174
|
||||
!define STM_ONLY_THIS_INTERFACE 0x00000001
|
||||
!define STM_ONLY_THIS_NAME 0x00000008
|
||||
!define STM_ONLY_THIS_PROTOCOL 0x00000002
|
||||
!define STM_ONLY_THIS_TYPE 0x00000004
|
||||
!define STM_SETICON 0x0170
|
||||
!define STM_SETIMAGE 0x0172
|
||||
|
||||
#Tab control#
|
||||
!define TCM_FIRST 0x1300
|
||||
|
||||
#Progress bar control#
|
||||
!define PBM_SETRANGE 0x0401
|
||||
!define PBM_SETPOS 0x0402
|
||||
!define PBM_DELTAPOS 0x0403
|
||||
!define PBM_SETSTEP 0x0404
|
||||
!define PBM_STEPIT 0x0405
|
||||
!define PBM_GETPOS 0x0408
|
||||
!define PBM_SETMARQUEE 0x040a
|
||||
|
||||
!verbose pop
|
||||
!endif
|
@ -1,480 +0,0 @@
|
||||
; ---------------------
|
||||
; WinVer.nsh
|
||||
; ---------------------
|
||||
;
|
||||
; LogicLib extensions for handling Windows versions and service packs.
|
||||
;
|
||||
; IsNT checks if the installer is running on Windows NT family (NT4, 2000, XP, etc.)
|
||||
;
|
||||
; ${If} ${IsNT}
|
||||
; DetailPrint "Running on NT. Installing Unicode enabled application."
|
||||
; ${Else}
|
||||
; DetailPrint "Not running on NT. Installing ANSI application."
|
||||
; ${EndIf}
|
||||
;
|
||||
; IsServer checks if the installer is running on a server version of Windows (NT4, 2003, 2008, etc.)
|
||||
;
|
||||
; AtLeastWin<version> checks if the installer is running on Windows version at least as specified.
|
||||
; IsWin<version> checks if the installer is running on Windows version exactly as specified.
|
||||
; AtMostWin<version> checks if the installer is running on Windows version at most as specified.
|
||||
;
|
||||
; <version> can be replaced with the following values:
|
||||
;
|
||||
; 95
|
||||
; 98
|
||||
; ME
|
||||
;
|
||||
; NT4
|
||||
; 2000
|
||||
; XP
|
||||
; 2003
|
||||
; Vista
|
||||
; 2008
|
||||
; 7
|
||||
; 2008R2
|
||||
;
|
||||
; AtLeastServicePack checks if the installer is running on Windows service pack version at least as specified.
|
||||
; IsServicePack checks if the installer is running on Windows service pack version exactly as specified.
|
||||
; AtMostServicePack checks if the installer is running on Windows service version pack at most as specified.
|
||||
;
|
||||
; Usage examples:
|
||||
;
|
||||
; ${If} ${IsNT}
|
||||
; DetailPrint "Running on NT family."
|
||||
; DetailPrint "Surely not running on 95, 98 or ME."
|
||||
; ${AndIf} ${AtLeastWinNT4}
|
||||
; DetailPrint "Running on NT4 or better. Could even be 2003."
|
||||
; ${EndIf}
|
||||
;
|
||||
; ${If} ${AtLeastWinXP}
|
||||
; DetailPrint "Running on XP or better."
|
||||
; ${EndIf}
|
||||
;
|
||||
; ${If} ${IsWin2000}
|
||||
; DetailPrint "Running on 2000."
|
||||
; ${EndIf}
|
||||
;
|
||||
; ${If} ${IsWin2000}
|
||||
; ${AndIf} ${AtLeastServicePack} 3
|
||||
; ${OrIf} ${AtLeastWinXP}
|
||||
; DetailPrint "Running Win2000 SP3 or above"
|
||||
; ${EndIf}
|
||||
;
|
||||
; ${If} ${AtMostWinXP}
|
||||
; DetailPrint "Running on XP or older. Surely not running on Vista. Maybe 98, or even 95."
|
||||
; ${EndIf}
|
||||
;
|
||||
; Warning:
|
||||
;
|
||||
; Windows 95 and NT both use the same version number. To avoid getting NT4 misidentified
|
||||
; as Windows 95 and vice-versa or 98 as a version higher than NT4, always use IsNT to
|
||||
; check if running on the NT family.
|
||||
;
|
||||
; ${If} ${AtLeastWin95}
|
||||
; ${And} ${AtMostWinME}
|
||||
; DetailPrint "Running 95, 98 or ME."
|
||||
; DetailPrint "Actually, maybe it's NT4?"
|
||||
; ${If} ${IsNT}
|
||||
; DetailPrint "Yes, it's NT4! oops..."
|
||||
; ${Else}
|
||||
; DetailPrint "Nope, not NT4. phew..."
|
||||
; ${EndIf}
|
||||
; ${EndIf}
|
||||
;
|
||||
;
|
||||
; Other useful extensions are:
|
||||
;
|
||||
; * IsWin2003R2
|
||||
; * IsStarterEdition
|
||||
; * OSHasMediaCenter
|
||||
; * OSHasTabletSupport
|
||||
;
|
||||
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!ifndef ___WINVER__NSH___
|
||||
!define ___WINVER__NSH___
|
||||
|
||||
!include LogicLib.nsh
|
||||
!include Util.nsh
|
||||
|
||||
# masks for our variables
|
||||
|
||||
!define _WINVER_VERXBIT 0x00000001
|
||||
!define _WINVER_MASKVMAJ 0x7F000000
|
||||
!define _WINVER_MASKVMIN 0x00FF0000
|
||||
|
||||
!define _WINVER_NTBIT 0x80000000
|
||||
!define _WINVER_NTMASK 0x7FFFFFFF
|
||||
!define _WINVER_NTSRVBIT 0x40000000
|
||||
!define _WINVER_MASKVBLD 0x0000FFFF
|
||||
!define _WINVER_MASKSP 0x000F0000
|
||||
|
||||
# possible variable values for different versions
|
||||
|
||||
!define WINVER_95_NT 0x04000000 ;4.00.0950
|
||||
!define WINVER_95 0x04000000 ;4.00.0950
|
||||
!define WINVER_98_NT 0x040a0000 ;4.10.1998
|
||||
!define WINVER_98 0x040a0000 ;4.10.1998
|
||||
;define WINVER_98SE 0x040a0000 ;4.10.2222
|
||||
!define WINVER_ME_NT 0x045a0000 ;4.90.3000
|
||||
!define WINVER_ME 0x045a0000 ;4.90.3000
|
||||
;define WINVER_NT3d51 ;3.51.1057
|
||||
!define WINVER_NT4_NT 0x84000000 ;4.00.1381
|
||||
!define WINVER_NT4 0x04000000 ;4.00.1381
|
||||
!define WINVER_2000_NT 0x85000000 ;5.00.2195
|
||||
!define WINVER_2000 0x05000000 ;5.00.2195
|
||||
!define WINVER_XP_NT 0x85010000 ;5.01.2600
|
||||
!define WINVER_XP 0x05010000 ;5.01.2600
|
||||
;define WINVER_XP64 ;5.02.3790
|
||||
!define WINVER_2003_NT 0x85020000 ;5.02.3790
|
||||
!define WINVER_2003 0x05020000 ;5.02.3790
|
||||
!define WINVER_VISTA_NT 0x86000000 ;6.00.6000
|
||||
!define WINVER_VISTA 0x06000000 ;6.00.6000
|
||||
!define WINVER_2008_NT 0x86000001 ;6.00.6001
|
||||
!define WINVER_2008 0x06000001 ;6.00.6001
|
||||
!define WINVER_7_NT 0x86010000 ;6.01.????
|
||||
!define WINVER_7 0x06010000 ;6.01.????
|
||||
!define WINVER_2008R2_NT 0x86010001 ;6.01.????
|
||||
!define WINVER_2008R2 0x06010001 ;6.01.????
|
||||
|
||||
|
||||
# use this to make all nt > 9x
|
||||
|
||||
!ifdef WINVER_NT4_OVER_W95
|
||||
!define __WINVERTMP ${WINVER_NT4}
|
||||
!undef WINVER_NT4
|
||||
!define /math WINVER_NT4 ${__WINVERTMP} | ${_WINVER_VERXBIT}
|
||||
!undef __WINVERTMP
|
||||
!endif
|
||||
|
||||
# some definitions from header files
|
||||
|
||||
!define OSVERSIONINFOA_SIZE 148
|
||||
!define OSVERSIONINFOEXA_SIZE 156
|
||||
!define VER_PLATFORM_WIN32_NT 2
|
||||
!define VER_NT_WORKSTATION 1
|
||||
|
||||
!define SM_TABLETPC 86
|
||||
!define SM_MEDIACENTER 87
|
||||
!define SM_STARTER 88
|
||||
!define SM_SERVERR2 89
|
||||
|
||||
# variable declaration
|
||||
|
||||
!macro __WinVer_DeclareVars
|
||||
|
||||
!ifndef __WINVER_VARS_DECLARED
|
||||
|
||||
!define __WINVER_VARS_DECLARED
|
||||
|
||||
Var /GLOBAL __WINVERV
|
||||
Var /GLOBAL __WINVERSP
|
||||
|
||||
!endif
|
||||
|
||||
!macroend
|
||||
|
||||
# lazy initialization macro
|
||||
|
||||
!ifmacrondef __WinVer_Call_GetVersionEx
|
||||
|
||||
!macro __WinVer_Call_GetVersionEx STRUCT_SIZE
|
||||
|
||||
System::Call '*$0(i ${STRUCT_SIZE})'
|
||||
System::Call kernel32::GetVersionEx(ir0)i.r3
|
||||
|
||||
!macroend
|
||||
|
||||
!endif
|
||||
|
||||
!macro __WinVer_InitVars
|
||||
# variables
|
||||
!insertmacro __WinVer_DeclareVars
|
||||
|
||||
# only calculate version once
|
||||
StrCmp $__WINVERV "" _winver_noveryet
|
||||
Return
|
||||
_winver_noveryet:
|
||||
|
||||
# push used registers on the stack
|
||||
Push $0
|
||||
Push $1 ;maj
|
||||
Push $2 ;min
|
||||
Push $3 ;bld
|
||||
Push $R0 ;temp
|
||||
|
||||
# allocate memory
|
||||
System::Alloc ${OSVERSIONINFOEXA_SIZE}
|
||||
Pop $0
|
||||
|
||||
# use OSVERSIONINFOEX
|
||||
!insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOEXA_SIZE}
|
||||
|
||||
IntCmp $3 0 "" _winver_ex _winver_ex
|
||||
# OSVERSIONINFOEX not allowed (Win9x or NT4 w/SP < 6), use OSVERSIONINFO
|
||||
!insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOA_SIZE}
|
||||
_winver_ex:
|
||||
|
||||
# get results from struct
|
||||
System::Call '*$0(i.s,i.r1,i.r2,i.r3,i.s,&t128.s,&i2.s,&i2,&i2,&i1.s,&i1)'
|
||||
|
||||
# free struct
|
||||
System::Free $0
|
||||
|
||||
# win9x has major and minor info in high word of dwBuildNumber - remove it
|
||||
IntOp $3 $3 & 0xFFFF
|
||||
|
||||
# get dwOSVersionInfoSize
|
||||
Pop $R0
|
||||
|
||||
# get dwPlatformId
|
||||
Pop $0
|
||||
|
||||
# NT?
|
||||
IntCmp $0 ${VER_PLATFORM_WIN32_NT} "" _winver_notnt _winver_notnt
|
||||
IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTBIT}
|
||||
IntOp $__WINVERV $__WINVERV | ${_WINVER_NTBIT}
|
||||
_winver_notnt:
|
||||
|
||||
# get service pack information
|
||||
IntCmp $0 ${VER_PLATFORM_WIN32_NT} _winver_nt "" _winver_nt # win9x
|
||||
|
||||
# get szCSDVersion
|
||||
Pop $0
|
||||
|
||||
# copy second char
|
||||
StrCpy $0 $0 1 1
|
||||
|
||||
# discard invalid wServicePackMajor and wProductType
|
||||
Pop $R0
|
||||
Pop $R0
|
||||
|
||||
# switch
|
||||
StrCmp $0 'A' "" +3
|
||||
StrCpy $0 1
|
||||
Goto _winver_sp_done
|
||||
StrCmp $0 'B' "" +3
|
||||
StrCpy $0 2
|
||||
Goto _winver_sp_done
|
||||
StrCmp $0 'C' "" +3
|
||||
StrCpy $0 3
|
||||
Goto _winver_sp_done
|
||||
StrCpy $0 0
|
||||
Goto _winver_sp_done
|
||||
|
||||
_winver_nt: # nt
|
||||
|
||||
IntCmp $R0 ${OSVERSIONINFOEXA_SIZE} "" _winver_sp_noex _winver_sp_noex
|
||||
|
||||
# discard szCSDVersion
|
||||
Pop $0
|
||||
|
||||
# get wProductType
|
||||
Exch
|
||||
Pop $0
|
||||
|
||||
# is server?
|
||||
IntCmp $0 ${VER_NT_WORKSTATION} _winver_noserver _winver_noserver ""
|
||||
IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTSRVBIT}
|
||||
_winver_noserver:
|
||||
|
||||
# get wServicePackMajor
|
||||
Pop $0
|
||||
|
||||
# done with sp
|
||||
Goto _winver_sp_done
|
||||
|
||||
_winver_sp_noex: # OSVERSIONINFO, not OSVERSIONINFOEX
|
||||
|
||||
#### TODO
|
||||
## For IsServer to support < NT4SP6, we need to check the registry
|
||||
## here to see if we are a server and/or DC
|
||||
|
||||
# get szCSDVersion
|
||||
Pop $0
|
||||
|
||||
# discard invalid wServicePackMajor and wProductType
|
||||
Pop $R0
|
||||
Pop $R0
|
||||
|
||||
# get service pack number from text
|
||||
StrCpy $R0 $0 13
|
||||
StrCmp $R0 "Service Pack " "" +3
|
||||
StrCpy $0 $0 "" 13 # cut "Service Pack "
|
||||
Goto +2
|
||||
StrCpy $0 0 # no service pack
|
||||
|
||||
!ifdef WINVER_NT4_OVER_W95
|
||||
IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT}
|
||||
!endif
|
||||
|
||||
_winver_sp_done:
|
||||
|
||||
# store service pack
|
||||
IntOp $0 $0 << 16
|
||||
IntOp $__WINVERSP $__WINVERSP | $0
|
||||
|
||||
### now for the version
|
||||
|
||||
# is server?
|
||||
IntOp $0 $__WINVERSP & ${_WINVER_NTSRVBIT}
|
||||
|
||||
# windows xp x64?
|
||||
IntCmp $0 0 "" _winver_not_xp_x64 _winver_not_xp_x64 # not server
|
||||
IntCmp $1 5 "" _winver_not_xp_x64 _winver_not_xp_x64 # maj 5
|
||||
IntCmp $2 2 "" _winver_not_xp_x64 _winver_not_xp_x64 # min 2
|
||||
# change XP x64 from 5.2 to 5.1 so it's still XP
|
||||
StrCpy $2 1
|
||||
_winver_not_xp_x64:
|
||||
|
||||
# server 2008?
|
||||
IntCmp $0 0 _winver_not_ntserver # server
|
||||
IntCmp 6 $1 "" "" _winver_not_ntserver # maj 6
|
||||
# extra bit so Server 2008 comes after Vista SP1 that has the same minor version, same for Win7 vs 2008R2
|
||||
IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT}
|
||||
_winver_not_ntserver:
|
||||
|
||||
# pack version
|
||||
IntOp $1 $1 << 24 # VerMajor
|
||||
IntOp $__WINVERV $__WINVERV | $1
|
||||
IntOp $0 $2 << 16
|
||||
IntOp $__WINVERV $__WINVERV | $0 # VerMinor
|
||||
IntOp $__WINVERSP $__WINVERSP | $3 # VerBuild
|
||||
|
||||
# restore registers
|
||||
Pop $R0
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
# version comparison LogicLib macros
|
||||
|
||||
!macro _WinVerAtLeast _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK}
|
||||
!insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!macro _WinVerIs _a _b _t _f
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
!insertmacro _= $__WINVERV `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!macro _WinVerAtMost _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK}
|
||||
!insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!macro __WinVer_DefineOSTest Test OS Suffix
|
||||
!define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}${Suffix}}`
|
||||
!macroend
|
||||
|
||||
!macro __WinVer_DefineOSTests Test Suffix
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 95 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 98 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} ME '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} NT4 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 2000 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} XP '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 2003 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} VISTA '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 2008 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 7 '${Suffix}'
|
||||
!insertmacro __WinVer_DefineOSTest ${Test} 2008R2 '${Suffix}'
|
||||
!macroend
|
||||
|
||||
!insertmacro __WinVer_DefineOSTests AtLeast ""
|
||||
!insertmacro __WinVer_DefineOSTests Is _NT
|
||||
!insertmacro __WinVer_DefineOSTests AtMost ""
|
||||
|
||||
# version feature LogicLib macros
|
||||
|
||||
!macro _IsNT _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTBIT}
|
||||
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define IsNT `"" IsNT ""`
|
||||
|
||||
!macro _IsServerOS _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTSRVBIT}
|
||||
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define IsServerOS `"" IsServerOS ""`
|
||||
|
||||
# service pack macros
|
||||
|
||||
!macro _WinVer_GetServicePackLevel OUTVAR
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
IntOp ${OUTVAR} $__WINVERSP & ${_WINVER_MASKSP}
|
||||
IntOp ${OUTVAR} ${OUTVAR} >> 16
|
||||
!macroend
|
||||
!define WinVerGetServicePackLevel '!insertmacro _WinVer_GetServicePackLevel '
|
||||
|
||||
!macro _AtLeastServicePack _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
|
||||
!insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define AtLeastServicePack `"" AtLeastServicePack`
|
||||
|
||||
!macro _AtMostServicePack _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
|
||||
!insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define AtMostServicePack `"" AtMostServicePack`
|
||||
|
||||
!macro _IsServicePack _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
${WinVerGetServicePackLevel} $_LOGICLIB_TEMP
|
||||
!insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}`
|
||||
!macroend
|
||||
!define IsServicePack `"" IsServicePack`
|
||||
|
||||
# special feature LogicLib macros
|
||||
|
||||
!macro _WinVer_SysMetricCheck m _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
System::Call user32::GetSystemMetrics(i${m})i.s
|
||||
pop $_LOGICLIB_TEMP
|
||||
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!define IsWin2003R2 `${SM_SERVERR2} WinVer_SysMetricCheck ""`
|
||||
!define IsStarterEdition `${SM_STARTER} WinVer_SysMetricCheck ""`
|
||||
!define OSHasMediaCenter `${SM_MEDIACENTER} WinVer_SysMetricCheck ""`
|
||||
!define OSHasTabletSupport `${SM_TABLETPC} WinVer_SysMetricCheck ""`
|
||||
|
||||
# version retrieval macros
|
||||
|
||||
!macro __WinVer_GetVer var rshift mask outvar
|
||||
${CallArtificialFunction} __WinVer_InitVars
|
||||
!if "${mask}" != ""
|
||||
IntOp ${outvar} ${var} & ${mask}
|
||||
!if "${rshift}" != ""
|
||||
IntOp ${outvar} ${outvar} >> ${rshift}
|
||||
!endif
|
||||
!else
|
||||
IntOp ${outvar} ${var} >> ${rshift}
|
||||
!endif
|
||||
!macroend
|
||||
|
||||
!define WinVerGetMajor '!insertmacro __WinVer_GetVer $__WINVERV 24 ${_WINVER_MASKVMAJ}'
|
||||
!define WinVerGetMinor '!insertmacro __WinVer_GetVer $__WINVERV 16 ${_WINVER_MASKVMIN}'
|
||||
!define WinVerGetBuild '!insertmacro __WinVer_GetVer $__WINVERSP "" ${_WINVER_MASKVBLD}'
|
||||
|
||||
# done
|
||||
|
||||
!endif # !___WINVER__NSH___
|
||||
|
||||
!verbose pop
|
@ -1,860 +0,0 @@
|
||||
/*
|
||||
|
||||
nsDialogs.nsh
|
||||
Header file for creating custom installer pages with nsDialogs
|
||||
|
||||
*/
|
||||
|
||||
!ifndef NSDIALOGS_INCLUDED
|
||||
!define NSDIALOGS_INCLUDED
|
||||
!verbose push
|
||||
!verbose 3
|
||||
|
||||
!include LogicLib.nsh
|
||||
!include WinMessages.nsh
|
||||
|
||||
!define WS_EX_DLGMODALFRAME 0x00000001
|
||||
!define WS_EX_NOPARENTNOTIFY 0x00000004
|
||||
!define WS_EX_TOPMOST 0x00000008
|
||||
!define WS_EX_ACCEPTFILES 0x00000010
|
||||
!define WS_EX_TRANSPARENT 0x00000020
|
||||
!define WS_EX_MDICHILD 0x00000040
|
||||
!define WS_EX_TOOLWINDOW 0x00000080
|
||||
!define WS_EX_WINDOWEDGE 0x00000100
|
||||
!define WS_EX_CLIENTEDGE 0x00000200
|
||||
!define WS_EX_CONTEXTHELP 0x00000400
|
||||
!define WS_EX_RIGHT 0x00001000
|
||||
!define WS_EX_LEFT 0x00000000
|
||||
!define WS_EX_RTLREADING 0x00002000
|
||||
!define WS_EX_LTRREADING 0x00000000
|
||||
!define WS_EX_LEFTSCROLLBAR 0x00004000
|
||||
!define WS_EX_RIGHTSCROLLBAR 0x00000000
|
||||
!define WS_EX_CONTROLPARENT 0x00010000
|
||||
!define WS_EX_STATICEDGE 0x00020000
|
||||
!define WS_EX_APPWINDOW 0x00040000
|
||||
|
||||
!define WS_CHILD 0x40000000
|
||||
!define WS_VISIBLE 0x10000000
|
||||
!define WS_DISABLED 0x08000000
|
||||
!define WS_CLIPSIBLINGS 0x04000000
|
||||
!define WS_CLIPCHILDREN 0x02000000
|
||||
!define WS_MAXIMIZE 0x01000000
|
||||
!define WS_VSCROLL 0x00200000
|
||||
!define WS_HSCROLL 0x00100000
|
||||
!define WS_GROUP 0x00020000
|
||||
!define WS_TABSTOP 0x00010000
|
||||
|
||||
!define ES_LEFT 0x00000000
|
||||
!define ES_CENTER 0x00000001
|
||||
!define ES_RIGHT 0x00000002
|
||||
!define ES_MULTILINE 0x00000004
|
||||
!define ES_UPPERCASE 0x00000008
|
||||
!define ES_LOWERCASE 0x00000010
|
||||
!define ES_PASSWORD 0x00000020
|
||||
!define ES_AUTOVSCROLL 0x00000040
|
||||
!define ES_AUTOHSCROLL 0x00000080
|
||||
!define ES_NOHIDESEL 0x00000100
|
||||
!define ES_OEMCONVERT 0x00000400
|
||||
!define ES_READONLY 0x00000800
|
||||
!define ES_WANTRETURN 0x00001000
|
||||
!define ES_NUMBER 0x00002000
|
||||
|
||||
!define SS_LEFT 0x00000000
|
||||
!define SS_CENTER 0x00000001
|
||||
!define SS_RIGHT 0x00000002
|
||||
!define SS_ICON 0x00000003
|
||||
!define SS_BLACKRECT 0x00000004
|
||||
!define SS_GRAYRECT 0x00000005
|
||||
!define SS_WHITERECT 0x00000006
|
||||
!define SS_BLACKFRAME 0x00000007
|
||||
!define SS_GRAYFRAME 0x00000008
|
||||
!define SS_WHITEFRAME 0x00000009
|
||||
!define SS_USERITEM 0x0000000A
|
||||
!define SS_SIMPLE 0x0000000B
|
||||
!define SS_LEFTNOWORDWRAP 0x0000000C
|
||||
!define SS_OWNERDRAW 0x0000000D
|
||||
!define SS_BITMAP 0x0000000E
|
||||
!define SS_ENHMETAFILE 0x0000000F
|
||||
!define SS_ETCHEDHORZ 0x00000010
|
||||
!define SS_ETCHEDVERT 0x00000011
|
||||
!define SS_ETCHEDFRAME 0x00000012
|
||||
!define SS_TYPEMASK 0x0000001F
|
||||
!define SS_REALSIZECONTROL 0x00000040
|
||||
!define SS_NOPREFIX 0x00000080
|
||||
!define SS_NOTIFY 0x00000100
|
||||
!define SS_CENTERIMAGE 0x00000200
|
||||
!define SS_RIGHTJUST 0x00000400
|
||||
!define SS_REALSIZEIMAGE 0x00000800
|
||||
!define SS_SUNKEN 0x00001000
|
||||
!define SS_EDITCONTROL 0x00002000
|
||||
!define SS_ENDELLIPSIS 0x00004000
|
||||
!define SS_PATHELLIPSIS 0x00008000
|
||||
!define SS_WORDELLIPSIS 0x0000C000
|
||||
!define SS_ELLIPSISMASK 0x0000C000
|
||||
|
||||
!define BS_PUSHBUTTON 0x00000000
|
||||
!define BS_DEFPUSHBUTTON 0x00000001
|
||||
!define BS_CHECKBOX 0x00000002
|
||||
!define BS_AUTOCHECKBOX 0x00000003
|
||||
!define BS_RADIOBUTTON 0x00000004
|
||||
!define BS_3STATE 0x00000005
|
||||
!define BS_AUTO3STATE 0x00000006
|
||||
!define BS_GROUPBOX 0x00000007
|
||||
!define BS_USERBUTTON 0x00000008
|
||||
!define BS_AUTORADIOBUTTON 0x00000009
|
||||
!define BS_PUSHBOX 0x0000000A
|
||||
!define BS_OWNERDRAW 0x0000000B
|
||||
!define BS_TYPEMASK 0x0000000F
|
||||
!define BS_LEFTTEXT 0x00000020
|
||||
!define BS_TEXT 0x00000000
|
||||
!define BS_ICON 0x00000040
|
||||
!define BS_BITMAP 0x00000080
|
||||
!define BS_LEFT 0x00000100
|
||||
!define BS_RIGHT 0x00000200
|
||||
!define BS_CENTER 0x00000300
|
||||
!define BS_TOP 0x00000400
|
||||
!define BS_BOTTOM 0x00000800
|
||||
!define BS_VCENTER 0x00000C00
|
||||
!define BS_PUSHLIKE 0x00001000
|
||||
!define BS_MULTILINE 0x00002000
|
||||
!define BS_NOTIFY 0x00004000
|
||||
!define BS_FLAT 0x00008000
|
||||
!define BS_RIGHTBUTTON ${BS_LEFTTEXT}
|
||||
|
||||
!define CBS_SIMPLE 0x0001
|
||||
!define CBS_DROPDOWN 0x0002
|
||||
!define CBS_DROPDOWNLIST 0x0003
|
||||
!define CBS_OWNERDRAWFIXED 0x0010
|
||||
!define CBS_OWNERDRAWVARIABLE 0x0020
|
||||
!define CBS_AUTOHSCROLL 0x0040
|
||||
!define CBS_OEMCONVERT 0x0080
|
||||
!define CBS_SORT 0x0100
|
||||
!define CBS_HASSTRINGS 0x0200
|
||||
!define CBS_NOINTEGRALHEIGHT 0x0400
|
||||
!define CBS_DISABLENOSCROLL 0x0800
|
||||
!define CBS_UPPERCASE 0x2000
|
||||
!define CBS_LOWERCASE 0x4000
|
||||
|
||||
!define LBS_NOTIFY 0x0001
|
||||
!define LBS_SORT 0x0002
|
||||
!define LBS_NOREDRAW 0x0004
|
||||
!define LBS_MULTIPLESEL 0x0008
|
||||
!define LBS_OWNERDRAWFIXED 0x0010
|
||||
!define LBS_OWNERDRAWVARIABLE 0x0020
|
||||
!define LBS_HASSTRINGS 0x0040
|
||||
!define LBS_USETABSTOPS 0x0080
|
||||
!define LBS_NOINTEGRALHEIGHT 0x0100
|
||||
!define LBS_MULTICOLUMN 0x0200
|
||||
!define LBS_WANTKEYBOARDINPUT 0x0400
|
||||
!define LBS_EXTENDEDSEL 0x0800
|
||||
!define LBS_DISABLENOSCROLL 0x1000
|
||||
!define LBS_NODATA 0x2000
|
||||
!define LBS_NOSEL 0x4000
|
||||
!define LBS_COMBOBOX 0x8000
|
||||
|
||||
!define LR_DEFAULTCOLOR 0x0000
|
||||
!define LR_MONOCHROME 0x0001
|
||||
!define LR_COLOR 0x0002
|
||||
!define LR_COPYRETURNORG 0x0004
|
||||
!define LR_COPYDELETEORG 0x0008
|
||||
!define LR_LOADFROMFILE 0x0010
|
||||
!define LR_LOADTRANSPARENT 0x0020
|
||||
!define LR_DEFAULTSIZE 0x0040
|
||||
!define LR_VGACOLOR 0x0080
|
||||
!define LR_LOADMAP3DCOLORS 0x1000
|
||||
!define LR_CREATEDIBSECTION 0x2000
|
||||
!define LR_COPYFROMRESOURCE 0x4000
|
||||
!define LR_SHARED 0x8000
|
||||
|
||||
!define IMAGE_BITMAP 0
|
||||
!define IMAGE_ICON 1
|
||||
!define IMAGE_CURSOR 2
|
||||
!define IMAGE_ENHMETAFILE 3
|
||||
|
||||
!define GWL_STYLE -16
|
||||
!define GWL_EXSTYLE -20
|
||||
|
||||
!define DEFAULT_STYLES ${WS_CHILD}|${WS_VISIBLE}|${WS_CLIPSIBLINGS}
|
||||
|
||||
!define __NSD_HLine_CLASS STATIC
|
||||
!define __NSD_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN}
|
||||
!define __NSD_HLine_EXSTYLE ${WS_EX_TRANSPARENT}
|
||||
|
||||
!define __NSD_VLine_CLASS STATIC
|
||||
!define __NSD_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN}
|
||||
!define __NSD_VLine_EXSTYLE ${WS_EX_TRANSPARENT}
|
||||
|
||||
!define __NSD_Label_CLASS STATIC
|
||||
!define __NSD_Label_STYLE ${DEFAULT_STYLES}|${SS_NOTIFY}
|
||||
!define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}
|
||||
|
||||
!define __NSD_Icon_CLASS STATIC
|
||||
!define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}|${SS_NOTIFY}
|
||||
!define __NSD_Icon_EXSTYLE 0
|
||||
|
||||
!define __NSD_Bitmap_CLASS STATIC
|
||||
!define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}|${SS_NOTIFY}
|
||||
!define __NSD_Bitmap_EXSTYLE 0
|
||||
|
||||
!define __NSD_BrowseButton_CLASS BUTTON
|
||||
!define __NSD_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
|
||||
!define __NSD_BrowseButton_EXSTYLE 0
|
||||
|
||||
!define __NSD_Link_CLASS LINK
|
||||
!define __NSD_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW}
|
||||
!define __NSD_Link_EXSTYLE 0
|
||||
|
||||
!define __NSD_Button_CLASS BUTTON
|
||||
!define __NSD_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
|
||||
!define __NSD_Button_EXSTYLE 0
|
||||
|
||||
!define __NSD_GroupBox_CLASS BUTTON
|
||||
!define __NSD_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX}
|
||||
!define __NSD_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT}
|
||||
|
||||
!define __NSD_CheckBox_CLASS BUTTON
|
||||
!define __NSD_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE}
|
||||
!define __NSD_CheckBox_EXSTYLE 0
|
||||
|
||||
!define __NSD_RadioButton_CLASS BUTTON
|
||||
!define __NSD_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE}
|
||||
!define __NSD_RadioButton_EXSTYLE 0
|
||||
|
||||
!define __NSD_Text_CLASS EDIT
|
||||
!define __NSD_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
|
||||
!define __NSD_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_Password_CLASS EDIT
|
||||
!define __NSD_Password_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_PASSWORD}
|
||||
!define __NSD_Password_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_Number_CLASS EDIT
|
||||
!define __NSD_Number_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_NUMBER}
|
||||
!define __NSD_Number_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_FileRequest_CLASS EDIT
|
||||
!define __NSD_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
|
||||
!define __NSD_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_DirRequest_CLASS EDIT
|
||||
!define __NSD_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
|
||||
!define __NSD_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_ComboBox_CLASS COMBOBOX
|
||||
!define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWN}
|
||||
!define __NSD_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_DropList_CLASS COMBOBOX
|
||||
!define __NSD_DropList_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWNLIST}
|
||||
!define __NSD_DropList_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_ListBox_CLASS LISTBOX
|
||||
!define __NSD_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY}
|
||||
!define __NSD_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!define __NSD_ProgressBar_CLASS msctls_progress32
|
||||
!define __NSD_ProgressBar_STYLE ${DEFAULT_STYLES}
|
||||
!define __NSD_ProgressBar_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
|
||||
|
||||
!macro __NSD_DefineControl NAME
|
||||
|
||||
!define NSD_Create${NAME} "nsDialogs::CreateControl ${__NSD_${Name}_CLASS} ${__NSD_${Name}_STYLE} ${__NSD_${Name}_EXSTYLE}"
|
||||
|
||||
!macroend
|
||||
|
||||
!insertmacro __NSD_DefineControl HLine
|
||||
!insertmacro __NSD_DefineControl VLine
|
||||
!insertmacro __NSD_DefineControl Label
|
||||
!insertmacro __NSD_DefineControl Icon
|
||||
!insertmacro __NSD_DefineControl Bitmap
|
||||
!insertmacro __NSD_DefineControl BrowseButton
|
||||
!insertmacro __NSD_DefineControl Link
|
||||
!insertmacro __NSD_DefineControl Button
|
||||
!insertmacro __NSD_DefineControl GroupBox
|
||||
!insertmacro __NSD_DefineControl CheckBox
|
||||
!insertmacro __NSD_DefineControl RadioButton
|
||||
!insertmacro __NSD_DefineControl Text
|
||||
!insertmacro __NSD_DefineControl Password
|
||||
!insertmacro __NSD_DefineControl Number
|
||||
!insertmacro __NSD_DefineControl FileRequest
|
||||
!insertmacro __NSD_DefineControl DirRequest
|
||||
!insertmacro __NSD_DefineControl ComboBox
|
||||
!insertmacro __NSD_DefineControl DropList
|
||||
!insertmacro __NSD_DefineControl ListBox
|
||||
!insertmacro __NSD_DefineControl ProgressBar
|
||||
|
||||
!macro __NSD_OnControlEvent EVENT HWND FUNCTION
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
|
||||
StrCpy $1 "${HWND}"
|
||||
|
||||
GetFunctionAddress $0 "${FUNCTION}"
|
||||
nsDialogs::On${EVENT} $1 $0
|
||||
|
||||
Pop $1
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro __NSD_DefineControlCallback EVENT
|
||||
|
||||
!define NSD_On${EVENT} `!insertmacro __NSD_OnControlEvent ${EVENT}`
|
||||
|
||||
!macroend
|
||||
|
||||
!macro __NSD_OnDialogEvent EVENT FUNCTION
|
||||
|
||||
Push $0
|
||||
|
||||
GetFunctionAddress $0 "${FUNCTION}"
|
||||
nsDialogs::On${EVENT} $0
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!macro __NSD_DefineDialogCallback EVENT
|
||||
|
||||
!define NSD_On${EVENT} `!insertmacro __NSD_OnDialogEvent ${EVENT}`
|
||||
|
||||
!macroend
|
||||
|
||||
!insertmacro __NSD_DefineControlCallback Click
|
||||
!insertmacro __NSD_DefineControlCallback Change
|
||||
!insertmacro __NSD_DefineControlCallback Notify
|
||||
!insertmacro __NSD_DefineDialogCallback Back
|
||||
|
||||
!macro _NSD_CreateTimer FUNCTION INTERVAL
|
||||
|
||||
Push $0
|
||||
|
||||
GetFunctionAddress $0 "${FUNCTION}"
|
||||
nsDialogs::CreateTimer $0 "${INTERVAL}"
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_CreateTimer `!insertmacro _NSD_CreateTimer`
|
||||
|
||||
!macro _NSD_KillTimer FUNCTION
|
||||
|
||||
Push $0
|
||||
|
||||
GetFunctionAddress $0 "${FUNCTION}"
|
||||
nsDialogs::KillTimer $0
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_KillTimer `!insertmacro _NSD_KillTimer`
|
||||
|
||||
!macro _NSD_AddStyle CONTROL STYLE
|
||||
|
||||
Push $0
|
||||
|
||||
System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_STYLE}) i .r0"
|
||||
System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_STYLE}, i $0|${STYLE})"
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_AddStyle "!insertmacro _NSD_AddStyle"
|
||||
|
||||
!macro _NSD_AddExStyle CONTROL EXSTYLE
|
||||
|
||||
Push $0
|
||||
|
||||
System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}) i .r0"
|
||||
System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}, i $0|${EXSTYLE})"
|
||||
|
||||
Pop $0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_AddExStyle "!insertmacro _NSD_AddExStyle"
|
||||
|
||||
!macro __NSD_GetText CONTROL VAR
|
||||
|
||||
System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})
|
||||
Pop ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_GetText `!insertmacro __NSD_GetText`
|
||||
|
||||
!macro __NSD_SetText CONTROL TEXT
|
||||
|
||||
SendMessage ${CONTROL} ${WM_SETTEXT} 0 `STR:${TEXT}`
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_SetText `!insertmacro __NSD_SetText`
|
||||
|
||||
!macro _NSD_SetTextLimit CONTROL LIMIT
|
||||
|
||||
SendMessage ${CONTROL} ${EM_SETLIMITTEXT} ${LIMIT} 0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_SetTextLimit "!insertmacro _NSD_SetTextLimit"
|
||||
|
||||
!macro __NSD_GetState CONTROL VAR
|
||||
|
||||
SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_GetState `!insertmacro __NSD_GetState`
|
||||
|
||||
!macro __NSD_SetState CONTROL STATE
|
||||
|
||||
SendMessage ${CONTROL} ${BM_SETCHECK} ${STATE} 0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_SetState `!insertmacro __NSD_SetState`
|
||||
|
||||
!macro __NSD_Check CONTROL
|
||||
|
||||
${NSD_SetState} ${CONTROL} ${BST_CHECKED}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_Check `!insertmacro __NSD_Check`
|
||||
|
||||
!macro __NSD_Uncheck CONTROL
|
||||
|
||||
${NSD_SetState} ${CONTROL} ${BST_UNCHECKED}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_Uncheck `!insertmacro __NSD_Uncheck`
|
||||
|
||||
!macro __NSD_SetFocus HWND
|
||||
|
||||
System::Call "user32::SetFocus(i${HWND})"
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_SetFocus `!insertmacro __NSD_SetFocus`
|
||||
|
||||
!macro _NSD_CB_AddString CONTROL STRING
|
||||
|
||||
SendMessage ${CONTROL} ${CB_ADDSTRING} 0 `STR:${STRING}`
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_CB_AddString "!insertmacro _NSD_CB_AddString"
|
||||
|
||||
!macro _NSD_CB_SelectString CONTROL STRING
|
||||
|
||||
SendMessage ${CONTROL} ${CB_SELECTSTRING} -1 `STR:${STRING}`
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_CB_SelectString "!insertmacro _NSD_CB_SelectString"
|
||||
|
||||
!macro _NSD_LB_AddString CONTROL STRING
|
||||
|
||||
SendMessage ${CONTROL} ${LB_ADDSTRING} 0 `STR:${STRING}`
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_LB_AddString "!insertmacro _NSD_LB_AddString"
|
||||
|
||||
!macro __NSD_LB_DelString CONTROL STRING
|
||||
|
||||
SendMessage ${CONTROL} ${LB_DELETESTRING} 0 `STR:${STRING}`
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_LB_DelString `!insertmacro __NSD_LB_DelString`
|
||||
|
||||
!macro __NSD_LB_Clear CONTROL VAR
|
||||
|
||||
SendMessage ${CONTROL} ${LB_RESETCONTENT} 0 0 ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_LB_Clear `!insertmacro __NSD_LB_Clear`
|
||||
|
||||
!macro __NSD_LB_GetCount CONTROL VAR
|
||||
|
||||
SendMessage ${CONTROL} ${LB_GETCOUNT} 0 0 ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_LB_GetCount `!insertmacro __NSD_LB_GetCount`
|
||||
|
||||
!macro _NSD_LB_SelectString CONTROL STRING
|
||||
|
||||
SendMessage ${CONTROL} ${LB_SELECTSTRING} -1 `STR:${STRING}`
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_LB_SelectString "!insertmacro _NSD_LB_SelectString"
|
||||
|
||||
!macro __NSD_LB_GetSelection CONTROL VAR
|
||||
|
||||
SendMessage ${CONTROL} ${LB_GETCURSEL} 0 0 ${VAR}
|
||||
System::Call 'user32::SendMessage(i ${CONTROL}, i ${LB_GETTEXT}, i ${VAR}, t .s)'
|
||||
Pop ${VAR}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_LB_GetSelection `!insertmacro __NSD_LB_GetSelection`
|
||||
|
||||
|
||||
!macro __NSD_LoadAndSetImage _LIHINSTMODE _IMGTYPE _LIHINSTSRC _LIFLAGS CONTROL IMAGE HANDLE
|
||||
|
||||
Push $0
|
||||
Push $R0
|
||||
|
||||
StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0
|
||||
|
||||
!if "${_LIHINSTMODE}" == "exeresource"
|
||||
System::Call 'kernel32::GetModuleHandle(i0) i.r0'
|
||||
!undef _LIHINSTSRC
|
||||
!define _LIHINSTSRC r0
|
||||
!endif
|
||||
|
||||
System::Call 'user32::LoadImage(i ${_LIHINSTSRC}, ts, i ${_IMGTYPE}, i0, i0, i${_LIFLAGS}) i.r0' "${IMAGE}"
|
||||
SendMessage $R0 ${STM_SETIMAGE} ${_IMGTYPE} $0
|
||||
|
||||
Pop $R0
|
||||
Exch $0
|
||||
|
||||
Pop ${HANDLE}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro __NSD_SetIconFromExeResource CONTROL IMAGE HANDLE
|
||||
!insertmacro __NSD_LoadAndSetImage exeresource ${IMAGE_ICON} 0 ${LR_DEFAULTSIZE} "${CONTROL}" "${IMAGE}" ${HANDLE}
|
||||
!macroend
|
||||
|
||||
!macro __NSD_SetIconFromInstaller CONTROL HANDLE
|
||||
!insertmacro __NSD_SetIconFromExeResource "${CONTROL}" "#103" ${HANDLE}
|
||||
!macroend
|
||||
|
||||
!define NSD_SetImage `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_BITMAP} 0 "${LR_LOADFROMFILE}"`
|
||||
!define NSD_SetBitmap `${NSD_SetImage}`
|
||||
|
||||
!define NSD_SetIcon `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_ICON} 0 "${LR_LOADFROMFILE}|${LR_DEFAULTSIZE}"`
|
||||
!define NSD_SetIconFromExeResource `!insertmacro __NSD_SetIconFromExeResource`
|
||||
!define NSD_SetIconFromInstaller `!insertmacro __NSD_SetIconFromInstaller`
|
||||
|
||||
|
||||
!macro __NSD_SetStretchedImage CONTROL IMAGE HANDLE
|
||||
|
||||
Push $0
|
||||
Push $1
|
||||
Push $2
|
||||
Push $R0
|
||||
|
||||
StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0
|
||||
|
||||
StrCpy $1 ""
|
||||
StrCpy $2 ""
|
||||
|
||||
System::Call '*(i, i, i, i) i.s'
|
||||
Pop $0
|
||||
|
||||
${If} $0 <> 0
|
||||
|
||||
System::Call 'user32::GetClientRect(iR0, ir0)'
|
||||
System::Call '*$0(i, i, i .s, i .s)'
|
||||
System::Free $0
|
||||
Pop $1
|
||||
Pop $2
|
||||
|
||||
${EndIf}
|
||||
|
||||
System::Call 'user32::LoadImage(i0, ts, i ${IMAGE_BITMAP}, ir1, ir2, i${LR_LOADFROMFILE}) i.s' "${IMAGE}"
|
||||
Pop $0
|
||||
SendMessage $R0 ${STM_SETIMAGE} ${IMAGE_BITMAP} $0
|
||||
|
||||
Pop $R0
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
|
||||
Pop ${HANDLE}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_SetStretchedImage `!insertmacro __NSD_SetStretchedImage`
|
||||
|
||||
!macro __NSD_FreeImage IMAGE
|
||||
|
||||
${If} ${IMAGE} <> 0
|
||||
|
||||
System::Call gdi32::DeleteObject(is) ${IMAGE}
|
||||
|
||||
${EndIf}
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_FreeImage `!insertmacro __NSD_FreeImage`
|
||||
!define NSD_FreeBitmap `${NSD_FreeImage}`
|
||||
|
||||
!macro __NSD_FreeIcon IMAGE
|
||||
System::Call user32::DestroyIcon(is) ${IMAGE}
|
||||
!macroend
|
||||
|
||||
!define NSD_FreeIcon `!insertmacro __NSD_FreeIcon`
|
||||
|
||||
!macro __NSD_ClearImage _IMGTYPE CONTROL
|
||||
|
||||
SendMessage ${CONTROL} ${STM_SETIMAGE} ${_IMGTYPE} 0
|
||||
|
||||
!macroend
|
||||
|
||||
!define NSD_ClearImage `!insertmacro __NSD_ClearImage ${IMAGE_BITMAP}`
|
||||
!define NSD_ClearIcon `!insertmacro __NSD_ClearImage ${IMAGE_ICON}`
|
||||
|
||||
|
||||
!define DEBUG `System::Call kernel32::OutputDebugString(ts)`
|
||||
|
||||
!macro __NSD_ControlCase TYPE
|
||||
|
||||
${Case} ${TYPE}
|
||||
${NSD_Create${TYPE}} $R3u $R4u $R5u $R6u $R7
|
||||
Pop $R9
|
||||
${Break}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro __NSD_ControlCaseEx TYPE
|
||||
|
||||
${Case} ${TYPE}
|
||||
Call ${TYPE}
|
||||
${Break}
|
||||
|
||||
!macroend
|
||||
|
||||
!macro NSD_FUNCTION_INIFILE
|
||||
|
||||
!insertmacro NSD_INIFILE ""
|
||||
|
||||
!macroend
|
||||
|
||||
!macro NSD_UNFUNCTION_INIFILE
|
||||
|
||||
!insertmacro NSD_INIFILE un.
|
||||
|
||||
!macroend
|
||||
|
||||
!macro NSD_INIFILE UNINSTALLER_FUNCPREFIX
|
||||
|
||||
;Functions to create dialogs based on old InstallOptions INI files
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}CreateDialogFromINI
|
||||
|
||||
# $0 = ini
|
||||
|
||||
ReadINIStr $R0 $0 Settings RECT
|
||||
${If} $R0 == ""
|
||||
StrCpy $R0 1018
|
||||
${EndIf}
|
||||
|
||||
nsDialogs::Create $R0
|
||||
Pop $R9
|
||||
|
||||
ReadINIStr $R0 $0 Settings RTL
|
||||
nsDialogs::SetRTL $R0
|
||||
|
||||
ReadINIStr $R0 $0 Settings NumFields
|
||||
|
||||
${DEBUG} "NumFields = $R0"
|
||||
|
||||
${For} $R1 1 $R0
|
||||
${DEBUG} "Creating field $R1"
|
||||
ReadINIStr $R2 $0 "Field $R1" Type
|
||||
${DEBUG} " Type = $R2"
|
||||
ReadINIStr $R3 $0 "Field $R1" Left
|
||||
${DEBUG} " Left = $R3"
|
||||
ReadINIStr $R4 $0 "Field $R1" Top
|
||||
${DEBUG} " Top = $R4"
|
||||
ReadINIStr $R5 $0 "Field $R1" Right
|
||||
${DEBUG} " Right = $R5"
|
||||
ReadINIStr $R6 $0 "Field $R1" Bottom
|
||||
${DEBUG} " Bottom = $R6"
|
||||
IntOp $R5 $R5 - $R3
|
||||
${DEBUG} " Width = $R5"
|
||||
IntOp $R6 $R6 - $R4
|
||||
${DEBUG} " Height = $R6"
|
||||
ReadINIStr $R7 $0 "Field $R1" Text
|
||||
${DEBUG} " Text = $R7"
|
||||
${Switch} $R2
|
||||
!insertmacro __NSD_ControlCase HLine
|
||||
!insertmacro __NSD_ControlCase VLine
|
||||
!insertmacro __NSD_ControlCase Label
|
||||
!insertmacro __NSD_ControlCase Icon
|
||||
!insertmacro __NSD_ControlCase Bitmap
|
||||
!insertmacro __NSD_ControlCaseEx Link
|
||||
!insertmacro __NSD_ControlCase Button
|
||||
!insertmacro __NSD_ControlCase GroupBox
|
||||
!insertmacro __NSD_ControlCase CheckBox
|
||||
!insertmacro __NSD_ControlCase RadioButton
|
||||
!insertmacro __NSD_ControlCase Text
|
||||
!insertmacro __NSD_ControlCase Password
|
||||
!insertmacro __NSD_ControlCaseEx FileRequest
|
||||
!insertmacro __NSD_ControlCaseEx DirRequest
|
||||
!insertmacro __NSD_ControlCase ComboBox
|
||||
!insertmacro __NSD_ControlCase DropList
|
||||
!insertmacro __NSD_ControlCase ListBox
|
||||
${EndSwitch}
|
||||
|
||||
WriteINIStr $0 "Field $R1" HWND $R9
|
||||
${Next}
|
||||
|
||||
nsDialogs::Show
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}UpdateINIState
|
||||
|
||||
${DEBUG} "Updating INI state"
|
||||
|
||||
ReadINIStr $R0 $0 Settings NumFields
|
||||
|
||||
${DEBUG} "NumField = $R0"
|
||||
|
||||
${For} $R1 1 $R0
|
||||
ReadINIStr $R2 $0 "Field $R1" HWND
|
||||
ReadINIStr $R3 $0 "Field $R1" "Type"
|
||||
${Switch} $R3
|
||||
${Case} "CheckBox"
|
||||
${Case} "RadioButton"
|
||||
${DEBUG} " HWND = $R2"
|
||||
${NSD_GetState} $R2 $R2
|
||||
${DEBUG} " Window selection = $R2"
|
||||
${Break}
|
||||
${CaseElse}
|
||||
${DEBUG} " HWND = $R2"
|
||||
${NSD_GetText} $R2 $R2
|
||||
${DEBUG} " Window text = $R2"
|
||||
${Break}
|
||||
${EndSwitch}
|
||||
WriteINIStr $0 "Field $R1" STATE $R2
|
||||
${Next}
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}FileRequest
|
||||
|
||||
IntOp $R5 $R5 - 15
|
||||
IntOp $R8 $R3 + $R5
|
||||
|
||||
${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
|
||||
Pop $R8
|
||||
|
||||
nsDialogs::SetUserData $R8 $R1 # remember field id
|
||||
|
||||
WriteINIStr $0 "Field $R1" HWND2 $R8
|
||||
|
||||
${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
|
||||
|
||||
ReadINIStr $R9 $0 "Field $R1" State
|
||||
|
||||
${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
|
||||
Pop $R9
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}DirRequest
|
||||
|
||||
IntOp $R5 $R5 - 15
|
||||
IntOp $R8 $R3 + $R5
|
||||
|
||||
${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
|
||||
Pop $R8
|
||||
|
||||
nsDialogs::SetUserData $R8 $R1 # remember field id
|
||||
|
||||
WriteINIStr $0 "Field $R1" HWND2 $R8
|
||||
|
||||
${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
|
||||
|
||||
ReadINIStr $R9 $0 "Field $R1" State
|
||||
|
||||
${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
|
||||
Pop $R9
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
|
||||
|
||||
Pop $R0
|
||||
|
||||
nsDialogs::GetUserData $R0
|
||||
Pop $R1
|
||||
|
||||
ReadINIStr $R2 $0 "Field $R1" HWND
|
||||
ReadINIStr $R4 $0 "Field $R1" Filter
|
||||
|
||||
${NSD_GetText} $R2 $R3
|
||||
|
||||
nsDialogs::SelectFileDialog save $R3 $R4
|
||||
Pop $R3
|
||||
|
||||
${If} $R3 != ""
|
||||
SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
|
||||
${EndIf}
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
|
||||
|
||||
Pop $R0
|
||||
|
||||
nsDialogs::GetUserData $R0
|
||||
Pop $R1
|
||||
|
||||
ReadINIStr $R2 $0 "Field $R1" HWND
|
||||
ReadINIStr $R3 $0 "Field $R1" Text
|
||||
|
||||
${NSD_GetText} $R2 $R4
|
||||
|
||||
nsDialogs::SelectFolderDialog $R3 $R4
|
||||
Pop $R3
|
||||
|
||||
${If} $R3 != error
|
||||
SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
|
||||
${EndIf}
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}Link
|
||||
|
||||
${NSD_CreateLink} $R3u $R4u $R5u $R6u $R7
|
||||
Pop $R9
|
||||
|
||||
nsDialogs::SetUserData $R9 $R1 # remember field id
|
||||
|
||||
${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink
|
||||
|
||||
FunctionEnd
|
||||
|
||||
Function ${UNINSTALLER_FUNCPREFIX}OnLink
|
||||
|
||||
Pop $R0
|
||||
|
||||
nsDialogs::GetUserData $R0
|
||||
Pop $R1
|
||||
|
||||
ReadINIStr $R1 $0 "Field $R1" STATE
|
||||
|
||||
ExecShell "" $R1
|
||||
|
||||
FunctionEnd
|
||||
|
||||
!macroend
|
||||
|
||||
!verbose pop
|
||||
!endif
|
@ -1,54 +0,0 @@
|
||||
; ---------------------
|
||||
; x64.nsh
|
||||
; ---------------------
|
||||
;
|
||||
; A few simple macros to handle installations on x64 machines.
|
||||
;
|
||||
; RunningX64 checks if the installer is running on x64.
|
||||
;
|
||||
; ${If} ${RunningX64}
|
||||
; MessageBox MB_OK "running on x64"
|
||||
; ${EndIf}
|
||||
;
|
||||
; DisableX64FSRedirection disables file system redirection.
|
||||
; EnableX64FSRedirection enables file system redirection.
|
||||
;
|
||||
; SetOutPath $SYSDIR
|
||||
; ${DisableX64FSRedirection}
|
||||
; File some.dll # extracts to C:\Windows\System32
|
||||
; ${EnableX64FSRedirection}
|
||||
; File some.dll # extracts to C:\Windows\SysWOW64
|
||||
;
|
||||
|
||||
!ifndef ___X64__NSH___
|
||||
!define ___X64__NSH___
|
||||
|
||||
!include LogicLib.nsh
|
||||
|
||||
!macro _RunningX64 _a _b _t _f
|
||||
!insertmacro _LOGICLIB_TEMP
|
||||
System::Call kernel32::GetCurrentProcess()i.s
|
||||
System::Call kernel32::IsWow64Process(is,*i.s)
|
||||
Pop $_LOGICLIB_TEMP
|
||||
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
|
||||
!macroend
|
||||
|
||||
!define RunningX64 `"" RunningX64 ""`
|
||||
|
||||
!macro DisableX64FSRedirection
|
||||
|
||||
System::Call kernel32::Wow64EnableWow64FsRedirection(i0)
|
||||
|
||||
!macroend
|
||||
|
||||
!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection"
|
||||
|
||||
!macro EnableX64FSRedirection
|
||||
|
||||
System::Call kernel32::Wow64EnableWow64FsRedirection(i1)
|
||||
|
||||
!macroend
|
||||
|
||||
!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection"
|
||||
|
||||
!endif # !___X64__NSH___
|
BIN
T7x/Stubs/bzip2
BIN
T7x/Stubs/lzma
BIN
T7x/Stubs/uninst
Before Width: | Height: | Size: 766 B |
BIN
T7x/Stubs/zlib
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |