12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121 |
- /*
- nsWindows.nsh
- Header file for creating custom installer pages with nsWindows
- */
- !ifndef NSWINDOWS_INCLUDED
- !define NSWINDOWS_INCLUDED
- !verbose push
- !verbose 3
- !include nsDialogs.nsh
- !include Colors.nsh
- ;hWndInsertAfter:
- !define HWND_TOP 0
- !define HWND_BOTTOM 1
- !define HWND_TOPMOST -1
- !define HWND_NOTOPMOST -2
- ;uFlags :
- !define SWP_NOSIZE 0x0001
- !define SWP_NOMOVE 0x0002
- !define SWP_NOZORDER 0x0004
- !define SWP_NOREDRAW 0x0008
- !define SWP_NOACTIVATE 0x0010
- !define SWP_FRAMECHANGED 0x0020 /* The frame changed: send WM_NCCALCSIZE */
- !define SWP_SHOWWINDOW 0x0040
- !define SWP_HIDEWINDOW 0x0080
- !define SWP_NOCOPYBITS 0x0100
- !define SWP_NOOWNERZORDER 0x0200 /* Don't do owner Z ordering */
- !define SWP_NOSENDCHANGING 0x0400 /* Don't send WM_WINDOWPOSCHANGING */
- !define SWP_DRAWFRAME ${SWP_FRAMECHANGED}
- !define SWP_NOREPOSITION ${SWP_NOOWNERZORDER}
- !define SWP_DEFERERASE 0x2000
- !define SWP_ASYNCWINDOWPOS 0x4000
- /*
- * Window sTYLES
- */
- ;dwStyle:
- !define WS_OVERLAPPED 0x00000000
- !define WS_POPUP 0x80000000
- !define WS_CAPTION 0x00C00000 /* WS_BORDER | WS_DLGFRAME */
- !define WS_MINIMIZE 0x20000000
- ;!define WS_VISIBLE 0x10000000
- ;!define WS_DISABLED 0x08000000
- ;!define WS_CLIPSIBLINGS 0x04000000
- ;!define WS_CLIPCHILDREN 0x02000000
- ;!define WS_MAXIMIZE 0x01000000
- ;!define WS_CHILD 0x40000000
- !define WS_BORDER 0x00800000
- !define WS_DLGFRAME 0x00400000
- ;!define WS_VSCROLL 0x00200000
- ;!define WS_HSCROLL 0x00100000
- !define WS_SYSMENU 0x00080000
- !define WS_THICKFRAME 0x00040000
- ;!define WS_GROUP 0x00020000
- ;!define WS_TABSTOP 0x00010000
- !define WS_MINIMIZEBOX 0x00020000
- !define WS_MAXIMIZEBOX 0x00010000
- !define WS_TILED ${WS_OVERLAPPED}
- !define WS_ICONIC ${WS_MINIMIZE}
- !define WS_SIZEBOX ${WS_THICKFRAME}
- !define WS_TILEDWINDOW ${WS_OVERLAPPEDWINDOW}
- /*
- * Common Window Styles
- */
- !define WS_OVERLAPPEDWINDOW ${WS_OVERLAPPED}|${WS_CAPTION}|${WS_SYSMENU}|${WS_THICKFRAME}|${WS_MINIMIZEBOX}|${WS_MAXIMIZEBOX}
- !define WS_POPUPWINDOW ${WS_POPUP}|${WS_BORDER}|${WS_SYSMENU}
- !define WS_CHILDWINDOW ${WS_CHILD}
- !define WS_EX_OVERLAPPEDWINDOW ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define WS_EX_PALETTEWINDOW ${WS_EX_WINDOWEDGE}|${WS_EX_TOOLWINDOW}|${WS_EX_TOPMOST}
- ; /* WINVER >= 0x0400 */
- ;(_WIN32_WINNT >= 0x0500)
- !define WS_EX_LAYERED 0x00080000
- !define WS_EX_NOINHERITLAYOUT 0x00100000 ; Disable inheritence of mirroring by children
- !define WS_EX_LAYOUTRTL 0x00400000 ; Right to left mirroring
- ; /* WINVER >= 0x0500 */
- ;(_WIN32_WINNT >= 0x0501)
- !define WS_EX_COMPOSITED 0x02000000
- ; /* _WIN32_WINNT >= 0x0501 */
- ;(_WIN32_WINNT >= 0x0500)
- !define WS_EX_NOACTIVATE 0x08000000
- ; /* _WIN32_WINNT >= 0x0500 */
- !define __NSW_HLine_CLASS STATIC
- !define __NSW_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN}
- !define __NSW_HLine_EXSTYLE ${WS_EX_TRANSPARENT}
- !define __NSW_VLine_CLASS STATIC
- !define __NSW_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN}
- !define __NSW_VLine_EXSTYLE ${WS_EX_TRANSPARENT}
- !define __NSW_Label_CLASS STATIC
- !define __NSW_Label_STYLE ${DEFAULT_STYLES}|${SS_NOTIFY}
- !define __NSW_Label_EXSTYLE ${WS_EX_TRANSPARENT}
- !define __NSW_Icon_CLASS STATIC
- !define __NSW_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}|${SS_NOTIFY}
- !define __NSW_Icon_EXSTYLE 0
- !define __NSW_Bitmap_CLASS STATIC
- !define __NSW_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}|${SS_NOTIFY}
- !define __NSW_Bitmap_EXSTYLE 0
- !define __NSW_BrowseButton_CLASS BUTTON
- !define __NSW_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
- !define __NSW_BrowseButton_EXSTYLE 0
- !define __NSW_Link_CLASS LINK
- !define __NSW_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW}
- !define __NSW_Link_EXSTYLE 0
- !define __NSW_Button_CLASS BUTTON
- !define __NSW_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
- !define __NSW_Button_EXSTYLE 0
- !define __NSW_GroupBox_CLASS BUTTON
- !define __NSW_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX}
- !define __NSW_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT}
- !define __NSW_CheckBox_CLASS BUTTON
- !define __NSW_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE}
- !define __NSW_CheckBox_EXSTYLE 0
- !define __NSW_RadioButton_CLASS BUTTON
- !define __NSW_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE}
- !define __NSW_RadioButton_EXSTYLE 0
- !define __NSW_Text_CLASS EDIT
- !define __NSW_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
- !define __NSW_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_ReadText_CLASS EDIT
- !define __NSW_ReadText_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_READONLY}
- !define __NSW_ReadText_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_Memo_CLASS EDIT
- !define __NSW_Memo_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOVSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}|${WS_VSCROLL}
- !define __NSW_Memo_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_Password_CLASS EDIT
- !define __NSW_Password_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_PASSWORD}
- !define __NSW_Password_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_Number_CLASS EDIT
- !define __NSW_Number_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_NUMBER}
- !define __NSW_Number_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_FileRequest_CLASS EDIT
- !define __NSW_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
- !define __NSW_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_DirRequest_CLASS EDIT
- !define __NSW_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
- !define __NSW_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_ComboBox_CLASS COMBOBOX
- !define __NSW_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWN}
- !define __NSW_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_DropList_CLASS COMBOBOX
- !define __NSW_DropList_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWNLIST}
- !define __NSW_DropList_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_ListBox_CLASS LISTBOX
- !define __NSW_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY}
- !define __NSW_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !define __NSW_ProgressBar_CLASS msctls_progress32
- !define __NSW_ProgressBar_STYLE ${DEFAULT_STYLES}
- !define __NSW_ProgressBar_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
- !macro _NSW_CenterWindow HWND HWPARENT
- ; ${nsWindows}::CenterWindow ${HWND} ${HWPARENT}
- Push $R0
- System::Call /NOUNLOAD "*(i, i, i, i) i.s"
- Pop $R0
- ;Get placement
- System::Call /NOUNLOAD 'User32::GetWindowRect(i, i) i (${HWND}, R0)'
- System::Call /NOUNLOAD "*$R0(i .s, i .s, i .s, i .s)"
- Pop $0 ;left
- Pop $1 ;top
- Pop $2 ;right
- Pop $3 ;bottom
-
- IntOp $R1 $2 - $0 ;width
- IntOp $R2 $3 - $1 ;height
- ;Messagebox mb_ok "$$0:$0 $$1:$1 $$2:$2 $$3:$3"
- ;Get Parent's placement
- System::Call /NOUNLOAD 'User32::GetWindowRect(i, i) i (${HWPARENT}, R0)'
- System::Call /NOUNLOAD "*$R0(i .s, i .s, i .s, i .s)"
- System::Free $R0
- Pop $0 ;parentleft
- Pop $1 ;parenttop
- Pop $2 ;parentright
- Pop $3 ;parentbottom
- ;Messagebox mb_ok "$$0:$0 $$1:$1 $$2:$2 $$3:$3"
- IntOp $R3 $2 - $0 ;parentwidth
- IntOp $R4 $3 - $1 ;parentheight
-
- IntOp $R3 $R3 - $R1 ;width difference
- IntOp $R3 $R3 / 2 ;width difference / 2
-
- IntOp $R4 $R4 - $R2 ;height difference
- IntOp $R4 $R4 / 2 ;height difference / 2
- IntOp $R3 $0 + $R3 ;x /new
- IntOp $R4 $1 + $R4 ;y /new
-
- ;${NSW_SetWindowPos} ${HWND} $R3 $R4
- System::Call user32::SetWindowPos(i${HWND},i0,i$R3,i$R4,i0,i0,i${SWP_NOSIZE})
- Pop $R0
- ;Messagebox mb_ok "$$R3:$R3 $$R4:$R4"
- !macroend
- !define NSW_CenterWindow `!insertmacro _NSW_CenterWindow`
- ;add by zhfi
- !ifndef dwExStyle
- !define dwExStyle ${WS_EX_CLIENTEDGE}|${WS_EX_WINDOWEDGE}
- !endif
- !ifndef dwStyle
- !define dwStyle ${WS_VISIBLE}|${WS_SYSMENU}|${WS_CAPTION}
- !endif
- var insWindows
- var hnsWindows
- !macro _NSW_CreateWindow OUTVAR TITLE INTERVAL
- IsWindow ${OUTVAR} 0 +3
- ShowWindow ${OUTVAR} ${SW_SHOW}
- Abort
- !ifdef insWindows
- !undef insWindows
- !endif
- !ifdef nsWindows
- !undef nsWindows
- !endif
- IsWindow $hnsWindows 0 +2
- IntOp $insWindows $insWindows + 1
- !define insWindows $insWindows
- !define nsWindows nsWindows${insWindows}
- ;
- !echo "Generating nsWindows temp plugins..."
- !ifndef nsWindows_warning
- !warning "Note: nsWindows.dll must be put in NSIS's Plugins Directory!"
- !define nsWindows_warning
- !endif
- !ifdef nsWindows_produce
- !undef nsWindows_produce
- !endif
- !define nsWindows_produce "${NSISDIR}\Plugins\nsWindows_produce.bat"
- !appendfile "${nsWindows_produce}" '@echo off$\n'
- !appendfile "${nsWindows_produce}" 'del /q "${NSISDIR}\Plugins\nsWindows.tmp\nsWindows*.dll"$\n'
- !appendfile "${nsWindows_produce}" 'md "${NSISDIR}\Plugins\nsWindows.tmp\"$\n'
- !appendfile "${nsWindows_produce}" 'copy /B /-Y "${NSISDIR}\Plugins\nsWindows.dll" "${NSISDIR}\Plugins\nsWindows.tmp\${nsWindows}.dll"$\n'
- !appendfile "${nsWindows_produce}" 'exit$\n'
- !execute "${nsWindows_produce}"
- !delfile "${nsWindows_produce}"
- !undef nsWindows_produce
- !echo "Generating finished!"
- ;
- !AddPluginDir "${NSISDIR}\Plugins\nsWindows.tmp\"
- ReserveFile "${NSISDIR}\Plugins\nsWindows.tmp\${nsWindows}.dll"
- ${nsWindows}::Create $hwndparent ${dwExStyle} ${dwStyle} "${TITLE}" ${INTERVAL}
- Pop ${OUTVAR}
- StrCpy $hnsWindows ${OUTVAR}
- ShowWindow ${OUTVAR} ${SW_HIDE}
- !macroend
- !define NSW_CreateWindow `!insertmacro _NSW_CreateWindow`
- !macro _NSW_CreateWindowEx OUTVAR HWND ExStyle Style TITLE INTERVAL
- IsWindow ${OUTVAR} 0 +3
- ShowWindow ${OUTVAR} ${SW_SHOW}
- Abort
- !ifdef insWindows
- !undef insWindows
- !endif
- !ifdef nsWindows
- !undef nsWindows
- !endif
- IsWindow $hnsWindows 0 +2
- IntOp $insWindows $insWindows + 1
- !define insWindows $insWindows
- !define nsWindows nsWindows${insWindows}
- ;
- !echo "Generating nsWindows temp plugins..."
- !ifndef nsWindows_warning
- !warning "Note: nsWindows.dll must be put in NSIS's Plugins Directory!"
- !define nsWindows_warning
- !endif
- !ifdef nsWindows_produce
- !undef nsWindows_produce
- !endif
- !define nsWindows_produce "${NSISDIR}\Plugins\nsWindows_produce.bat"
- !appendfile "${nsWindows_produce}" '@echo off$\n'
- !appendfile "${nsWindows_produce}" 'del /q "${NSISDIR}\Plugins\nsWindows.tmp\nsWindows*.dll"$\n'
- !appendfile "${nsWindows_produce}" 'md "${NSISDIR}\Plugins\nsWindows.tmp\"$\n'
- !appendfile "${nsWindows_produce}" 'copy /B /-Y "${NSISDIR}\Plugins\nsWindows.dll" "${NSISDIR}\Plugins\nsWindows.tmp\${nsWindows}.dll"$\n'
- !appendfile "${nsWindows_produce}" 'exit$\n'
- !execute "${nsWindows_produce}"
- !delfile "${nsWindows_produce}"
- !undef nsWindows_produce
- !echo "Generating finished!"
- ;
- !AddPluginDir "${NSISDIR}\Plugins\nsWindows.tmp\"
- ReserveFile "${NSISDIR}\Plugins\nsWindows.tmp\${nsWindows}.dll"
- ${nsWindows}::Create ${HWND} ${ExStyle} ${Style} "${TITLE}" ${INTERVAL}
- Pop ${OUTVAR}
- StrCpy $hnsWindows ${OUTVAR}
- ShowWindow ${OUTVAR} ${SW_HIDE}
- !macroend
- !define NSW_CreateWindowEx `!insertmacro _NSW_CreateWindowEx`
- !macro _NSW_Show
- ${nsWindows}::Show
- ; IsWindow $hnsWindows 0 +2
- ; IntOp $insWindows $insWindows + 1
- !echo "Clearing nsWindows temp plugins..."
- !ifdef nsWindows_clear
- !undef nsWindows_clear
- !endif
- !define nsWindows_clear "${NSISDIR}\Plugins\nsWindows_clear.bat"
- !appendfile "${nsWindows_clear}" '@echo off$\n'
- !appendfile "${nsWindows_clear}" 'del /q "${NSISDIR}\Plugins\nsWindows.tmp\nsWindows*.dll"$\n'
- !appendfile "${nsWindows_clear}" 'rd /q "${NSISDIR}\Plugins\nsWindows.tmp\"$\n'
- !appendfile "${nsWindows_clear}" 'exit$\n'
- !execute "${nsWindows_clear}"
- !delfile "${nsWindows_clear}"
- !undef nsWindows_clear
- !echo "Clearing finished!"
- !macroend
- !define NSW_Show `!insertmacro _NSW_Show`
- !macro __NSW_DefineControl NAME
- !define NSW_Create${NAME} "${nsWindows}::CreateControl ${__NSW_${Name}_CLASS} ${__NSW_${Name}_STYLE} ${__NSW_${Name}_EXSTYLE}"
- !macroend
- !insertmacro __NSW_DefineControl HLine
- !insertmacro __NSW_DefineControl VLine
- !insertmacro __NSW_DefineControl Label
- !insertmacro __NSW_DefineControl Icon
- !insertmacro __NSW_DefineControl Bitmap
- !insertmacro __NSW_DefineControl BrowseButton
- !insertmacro __NSW_DefineControl Link
- !insertmacro __NSW_DefineControl Button
- !insertmacro __NSW_DefineControl GroupBox
- !insertmacro __NSW_DefineControl CheckBox
- !insertmacro __NSW_DefineControl RadioButton
- !insertmacro __NSW_DefineControl Text
- !insertmacro __NSW_DefineControl ReadText
- !insertmacro __NSW_DefineControl Memo
- !insertmacro __NSW_DefineControl Password
- !insertmacro __NSW_DefineControl Number
- !insertmacro __NSW_DefineControl FileRequest
- !insertmacro __NSW_DefineControl DirRequest
- !insertmacro __NSW_DefineControl ComboBox
- !insertmacro __NSW_DefineControl DropList
- !insertmacro __NSW_DefineControl ListBox
- !insertmacro __NSW_DefineControl ProgressBar
- !macro __NSW_OnControlEvent EVENT HWND FUNCTION
- Push $0
- Push $1
- StrCpy $1 "${HWND}"
- GetFunctionAddress $0 "${FUNCTION}"
- ${nsWindows}::On${EVENT} $1 $0
- Pop $1
- Pop $0
- !macroend
- !macro __NSW_DefineControlCallback EVENT
- !define NSW_On${EVENT} `!insertmacro __NSW_OnControlEvent ${EVENT}`
- !macroend
- !macro __NSW_OnDialogEvent EVENT FUNCTION
- Push $0
- GetFunctionAddress $0 "${FUNCTION}"
- ${nsWindows}::On${EVENT} $0
- Pop $0
- !macroend
- !macro __NSW_DefineDialogCallback EVENT
- !define NSW_On${EVENT} `!insertmacro __NSW_OnDialogEvent ${EVENT}`
- !macroend
- !insertmacro __NSW_DefineControlCallback Click
- !insertmacro __NSW_DefineControlCallback Change
- !insertmacro __NSW_DefineControlCallback Notify
- !insertmacro __NSW_DefineControlCallback DropFiles
- !insertmacro __NSW_DefineDialogCallback Back
- !macro _NSW_CreateTimer FUNCTION INTERVAL
- Push $0
- GetFunctionAddress $0 "${FUNCTION}"
- ${nsWindows}::CreateTimer $0 "${INTERVAL}"
- Pop $0
- !macroend
- !define NSW_CreateTimer `!insertmacro _NSW_CreateTimer`
- !macro _NSW_KillTimer FUNCTION
- Push $0
- GetFunctionAddress $0 "${FUNCTION}"
- ${nsWindows}::KillTimer $0
- Pop $0
- !macroend
- !define NSW_KillTimer `!insertmacro _NSW_KillTimer`
- !macro _NSW_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 NSW_AddStyle "!insertmacro _NSW_AddStyle"
- !macro _NSW_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 NSW_AddExStyle "!insertmacro _NSW_AddExStyle"
- !macro __NSW_GetText CONTROL VAR
- System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})
- Pop ${VAR}
- !macroend
- !define NSW_GetText `!insertmacro __NSW_GetText`
- !macro __NSW_SetWindowSize CONTROL Width Height
- System::Call user32::SetWindowPos(i${CONTROL},i0,i0,i0,i${Width},i${Height},i${SWP_NOMOVE})
- !macroend
- !define NSW_SetWindowSize `!insertmacro __NSW_SetWindowSize`
- !macro __NSW_SetWindowPos CONTROL Left Top
- System::Call user32::SetWindowPos(i${CONTROL},i0,i${Left},i${Top},i0,i0,i${SWP_NOSIZE})
- !macroend
- !define NSW_SetWindowPos `!insertmacro __NSW_SetWindowPos`
- !macro __NSW_SetWindowPosEx CONTROL hWndInsertAfter Left Top Width Height uFlags
- System::Call user32::SetWindowPos(i${CONTROL},i${hWndInsertAfter},i${Left},i${Top},i${Width},i${Height},i${uFlags})
- !macroend
- !define NSW_SetWindowPosEx `!insertmacro __NSW_SetWindowPosEx`
- !macro _NSW_SetTransparent CONTROL PERCENT
- ${nsWindows}::SetTransparent ${CONTROL} ${PERCENT}
- !macroend
- !define NSW_SetTransparent `!insertmacro _NSW_SetTransparent`
- !macro __NSW_SetParent CONTROL PARENT
- System::Call user32::SetParent(i${CONTROL},i${PARENT})
- !macroend
- !define NSW_SetParent `!insertmacro __NSW_SetParent`
- !macro __NSW_DestroyWindow CONTROL
- System::Call user32::DestroyWindow(i${CONTROL})
- !macroend
- !define NSW_DestroyWindow `!insertmacro __NSW_DestroyWindow`
- !define NSW_CloseWindow `!insertmacro __NSW_DestroyWindow`
- !macro __NSW_MinimizeWindow CONTROL
- ShowWindow ${CONTROL} ${SW_MINIMIZE}
- ; System::Call user32::CloseWindow(i${CONTROL})
- !macroend
- !define NSW_MinimizeWindow `!insertmacro __NSW_MinimizeWindow`
- !macro __NSW_MaximizeWindow CONTROL
- ShowWindow ${CONTROL} ${SW_MAXIMIZE}
- !macroend
- !define NSW_MaximizeWindow `!insertmacro __NSW_MaximizeWindow`
- !macro __NSW_RestoreWindow CONTROL
- ShowWindow ${CONTROL} ${SW_NORMAL}
- ; System::Call user32::OpenIcon(i${CONTROL})
- !macroend
- !define NSW_RestoreWindow `!insertmacro __NSW_RestoreWindow`
- !macro __NSW_SetCtlText HWND FileName
- /*;用法:
- ;${NSW_SetCtlText} 控件句柄 文本文件名称
- ;此宏改自Restools的SetText函数
- ;链接:http://restools.hanzify.org/article.asp?id=29*/
- # 如果你对程序设计不熟悉,那么你可以不用理解这个过程,把它复制到你的脚本中就可以了。
- ; Exch $R0 ;${HWND}控件句柄
- ; Exch
- ; Exch $R1 ;${FileName}文件
- StrCpy $R0 ${HWND}
- StrCpy $R1 "${FileName}"
- Push $R2
- Push $R3
- Push $R4
- Push $R5
- ClearErrors
- FileOpen $R2 $R1 r ;$R2 = 文件句柄
- ${Unless} ${Errors} ;确保打开文件没有发生错误
- System::Call /NOUNLOAD "Kernel32::GetFileSize(i, i) i (R2, 0) .R3" ;$R3 = 文件大小
- IntOp $R3 $R3 + 1
- System::Alloc /NOUNLOAD $R3 ;分配内存
- Pop $R4 ;内存地址
- ${If} $R4 U> 0 ;确保分配了内存
- System::Call /NOUNLOAD "*(i 0) i .R5"
- System::Call /NOUNLOAD `Kernel32::ReadFile(i, i, i, i, i) i (R2, R4R4, R3, R5R5, 0)`
- System::Call /NOUNLOAD "*$R5(i .R1)"
- ${If} $R1 > 0
- System::Call /NOUNLOAD "User32::SendMessage(i, i, i, i) i (R0, ${WM_SETTEXT}, 0, R4)"
- ${EndIf}
- System::Free /NOUNLOAD $R5
- System::Free $R4 ;释放内存
- ${EndIf}
- FileClose $R2
- ${EndUnless}
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
- !macroend
- !define NSW_SetCtlText `!insertmacro __NSW_SetCtlText`
- !macro __NSW_SetText CONTROL TEXT
- SendMessage ${CONTROL} ${WM_SETTEXT} 0 `STR:${TEXT}`
- !macroend
- !define NSW_SetText `!insertmacro __NSW_SetText`
- !macro _NSW_SetTextLimit CONTROL LIMIT
- SendMessage ${CONTROL} ${EM_SETLIMITTEXT} ${LIMIT} 0
- !macroend
- !define NSW_SetTextLimit "!insertmacro _NSW_SetTextLimit"
- !macro __NSW_GetState CONTROL VAR
- SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR}
- !macroend
- !define NSW_GetState `!insertmacro __NSW_GetState`
- !macro __NSW_SetState CONTROL STATE
- SendMessage ${CONTROL} ${BM_SETCHECK} ${STATE} 0
- !macroend
- !define NSW_SetState `!insertmacro __NSW_SetState`
- !macro __NSW_Check CONTROL
- ${NSW_SetState} ${CONTROL} ${BST_CHECKED}
- !macroend
- !define NSW_Check `!insertmacro __NSW_Check`
- !macro __NSW_Uncheck CONTROL
- ${NSW_SetState} ${CONTROL} ${BST_UNCHECKED}
- !macroend
- !define NSW_Uncheck `!insertmacro __NSW_Uncheck`
- !macro __NSW_SetFocus HWND
- System::Call "user32::SetFocus(i${HWND})"
- !macroend
- !define NSW_SetFocus `!insertmacro __NSW_SetFocus`
- !macro _NSW_CB_AddString CONTROL STRING
- SendMessage ${CONTROL} ${CB_ADDSTRING} 0 `STR:${STRING}`
- !macroend
- !define NSW_CB_AddString "!insertmacro _NSW_CB_AddString"
- !macro _NSW_CB_SelectString CONTROL STRING
- SendMessage ${CONTROL} ${CB_SELECTSTRING} -1 `STR:${STRING}`
- !macroend
- !define NSW_CB_SelectString "!insertmacro _NSW_CB_SelectString"
- !macro __NSW_CB_GetSelection CONTROL VAR
- SendMessage ${CONTROL} ${CB_GETCURSEL} 0 0 ${VAR}
- System::Call 'user32::SendMessage(i ${CONTROL}, i ${CB_GETLBTEXT}, i ${VAR}, t .s)'
- Pop ${VAR}
- !macroend
- !define NSW_CB_GetSelection `!insertmacro __NSW_CB_GetSelection`
- !macro __NSW_CB_GetCurIndex CONTROL VAR
- SendMessage ${CONTROL} ${CB_GETCURSEL} 0 0 ${VAR}
- !macroend
- !define NSW_CB_GetCurIndex `!insertmacro __NSW_CB_GetCurIndex`
- !macro __NSW_CB_SetCurIndex CONTROL INDEX
- SendMessage ${CONTROL} ${CB_SETCURSEL} ${INDEX} 0
- !macroend
- !define NSW_CB_SetCurIndex `!insertmacro __NSW_CB_SetCurIndex`
- !macro _NSW_LB_AddString CONTROL STRING
- SendMessage ${CONTROL} ${LB_ADDSTRING} 0 `STR:${STRING}`
- !macroend
- !define NSW_LB_AddString "!insertmacro _NSW_LB_AddString"
- !macro __NSW_LB_DelString CONTROL STRING
- SendMessage ${CONTROL} ${LB_DELETESTRING} 0 `STR:${STRING}`
- !macroend
- !define NSW_LB_DelString `!insertmacro __NSW_LB_DelString`
- !macro __NSW_LB_Clear CONTROL VAR
- SendMessage ${CONTROL} ${LB_RESETCONTENT} 0 0 ${VAR}
- !macroend
- !define NSW_LB_Clear `!insertmacro __NSW_LB_Clear`
- !macro __NSW_LB_GetCount CONTROL VAR
- SendMessage ${CONTROL} ${LB_GETCOUNT} 0 0 ${VAR}
- !macroend
- !define NSW_LB_GetCount `!insertmacro __NSW_LB_GetCount`
- !macro _NSW_LB_SelectString CONTROL STRING
- SendMessage ${CONTROL} ${LB_SELECTSTRING} -1 `STR:${STRING}`
- !macroend
- !define NSW_LB_SelectString "!insertmacro _NSW_LB_SelectString"
- !macro __NSW_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 NSW_LB_GetSelection `!insertmacro __NSW_LB_GetSelection`
- !macro __NSW_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 __NSW_SetIconFromExeResource CONTROL IMAGE HANDLE
- !insertmacro __NSW_LoadAndSetImage exeresource ${IMAGE_ICON} 0 ${LR_DEFAULTSIZE} "${CONTROL}" "${IMAGE}" ${HANDLE}
- !macroend
- !macro __NSW_SetIconFromInstaller CONTROL HANDLE
- !insertmacro __NSW_SetIconFromExeResource "${CONTROL}" "#103" ${HANDLE}
- !macroend
- !define NSW_SetImage `!insertmacro __NSW_LoadAndSetImage file ${IMAGE_BITMAP} 0 "${LR_LOADFROMFILE}"`
- !define NSW_SetBitmap `${NSW_SetImage}`
- !define NSW_SetIcon `!insertmacro __NSW_LoadAndSetImage file ${IMAGE_ICON} 0 "${LR_LOADFROMFILE}|${LR_DEFAULTSIZE}"`
- !define NSW_SetIconFromExeResource `!insertmacro __NSW_SetIconFromExeResource`
- !define NSW_SetIconFromInstaller `!insertmacro __NSW_SetIconFromInstaller`
- !macro __NSW_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 NSW_SetStretchedImage `!insertmacro __NSW_SetStretchedImage`
- !macro __NSW_FreeImage IMAGE
- ${If} ${IMAGE} <> 0
- System::Call gdi32::DeleteObject(is) ${IMAGE}
- ${EndIf}
- !macroend
- !define NSW_FreeImage `!insertmacro __NSW_FreeImage`
- !define NSW_FreeBitmap `${NSW_FreeImage}`
- !macro __NSW_FreeIcon IMAGE
- System::Call user32::DestroyIcon(is) ${IMAGE}
- !macroend
- !define NSW_FreeIcon `!insertmacro __NSW_FreeIcon`
- !macro __NSW_ClearImage _IMGTYPE CONTROL
- SendMessage ${CONTROL} ${STM_SETIMAGE} ${_IMGTYPE} 0
- !macroend
- !define NSW_ClearImage `!insertmacro __NSW_ClearImage ${IMAGE_BITMAP}`
- !define NSW_ClearIcon `!insertmacro __NSW_ClearImage ${IMAGE_ICON}`
- !ifndef DEBUG
- !define DEBUG `System::Call kernel32::OutputDebugString(ts)`
- !endif
- !macro __NSW_ControlCase TYPE
- ${Case} ${TYPE}
- ${NSW_Create${TYPE}} $R3u $R4u $R5u $R6u $R7
- Pop $R9
- ${Break}
- !macroend
- !macro __NSW_ControlCaseEx TYPE
- ${Case} ${TYPE}
- Call ${TYPE}
- ${Break}
- !macroend
- !macro NSW_FUNCTION_INIFILE
- !insertmacro NSW_INIFILE ""
- !macroend
- !macro NSW_UNFUNCTION_INIFILE
- !insertmacro NSW_INIFILE un.
- !macroend
- !macro NSW_INIFILE UNINSTALLER_FUNCPREFIX
- ;Functions to create dialogs based on old InstallOptions INI files
- Function ${UNINSTALLER_FUNCPREFIX}CreateDialogFromINI
- ;Window name
- Pop $R1
- # $0 = ini
- ReadINIStr $R0 $0 Settings RECT
- ${If} $R0 == ""
- StrCpy $R0 1018
- ${EndIf}
-
- Pop $R9
- ${NSW_CreateWindow} $R9 $R1 $R0
- ; ${nsWindows}::Create $hwndparent ${dwExStyle} ${dwStyle} $R1 $R0
- ; ${nsWindows}::Create $hwndparent ${dwExStyle} ${dwStyle} $R1 $R0
- ; ${nsWindows}::Create $R0
- ReadINIStr $R0 $0 Settings RTL
- ${nsWindows}::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 __NSW_ControlCase HLine
- !insertmacro __NSW_ControlCase VLine
- !insertmacro __NSW_ControlCase Label
- !insertmacro __NSW_ControlCase Icon
- !insertmacro __NSW_ControlCase Bitmap
- !insertmacro __NSW_ControlCaseEx Link
- !insertmacro __NSW_ControlCase Button
- !insertmacro __NSW_ControlCase GroupBox
- !insertmacro __NSW_ControlCase CheckBox
- !insertmacro __NSW_ControlCase RadioButton
- !insertmacro __NSW_ControlCase Text
- !insertmacro __NSW_ControlCase Password
- !insertmacro __NSW_ControlCaseEx FileRequest
- !insertmacro __NSW_ControlCaseEx DirRequest
- !insertmacro __NSW_ControlCase ComboBox
- !insertmacro __NSW_ControlCase DropList
- !insertmacro __NSW_ControlCase ListBox
- ${EndSwitch}
- WriteINIStr $0 "Field $R1" HWND $R9
- ${Next}
- ; nsWindows::Show
- ${NSW_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"
- ${NSW_GetState} $R2 $R2
- ${DEBUG} " Window selection = $R2"
- ${Break}
- ${CaseElse}
- ${DEBUG} " HWND = $R2"
- ${NSW_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
- ${NSW_CreateBrowseButton} $R8u $R4u 15u $R6u ...
- Pop $R8
- ${nsWindows}::SetUserData $R8 $R1 # remember field id
- WriteINIStr $0 "Field $R1" HWND2 $R8
- ${NSW_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
- ReadINIStr $R9 $0 "Field $R1" State
- ${NSW_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
- Pop $R9
- FunctionEnd
- Function ${UNINSTALLER_FUNCPREFIX}DirRequest
- IntOp $R5 $R5 - 15
- IntOp $R8 $R3 + $R5
- ${NSW_CreateBrowseButton} $R8u $R4u 15u $R6u ...
- Pop $R8
- ${nsWindows}::SetUserData $R8 $R1 # remember field id
- WriteINIStr $0 "Field $R1" HWND2 $R8
- ${NSW_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
- ReadINIStr $R9 $0 "Field $R1" State
- ${NSW_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
- Pop $R9
- FunctionEnd
- Function ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
- Pop $R0
- ${nsWindows}::GetUserData $R0
- Pop $R1
- ReadINIStr $R2 $0 "Field $R1" HWND
- ReadINIStr $R4 $0 "Field $R1" Filter
- ${NSW_GetText} $R2 $R3
- ${nsWindows}::SelectFileDialog save $R3 $R4
- Pop $R3
- ${If} $R3 != ""
- SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
- ${EndIf}
- FunctionEnd
- Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
- Pop $R0
- ${nsWindows}::GetUserData $R0
- Pop $R1
- ReadINIStr $R2 $0 "Field $R1" HWND
- ReadINIStr $R3 $0 "Field $R1" Text
- ${NSW_GetText} $R2 $R4
- ${nsWindows}::SelectFolderDialog $R3 $R4
- Pop $R3
- ${If} $R3 != error
- SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
- ${EndIf}
- FunctionEnd
- Function ${UNINSTALLER_FUNCPREFIX}Link
- ${NSW_CreateLink} $R3u $R4u $R5u $R6u $R7
- Pop $R9
- ${nsWindows}::SetUserData $R9 $R1 # remember field id
- ${NSW_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink
- FunctionEnd
- Function ${UNINSTALLER_FUNCPREFIX}OnLink
- Pop $R0
- ${nsWindows}::GetUserData $R0
- Pop $R1
- ReadINIStr $R1 $0 "Field $R1" STATE
- ExecShell "" $R1
- FunctionEnd
- !macroend
- !verbose pop
- !endif
|