# INFO #
Name `Test`
OutFile Test.exe
InstallDir $PROGRAMFILES\Test
# COMPRESSOR #
SetCompressor /SOLID /FINAL lzma
# RUNTIME #
RequestExecutionLevel "USER"
# HIDE # SHOW #
ShowInstDetails nevershow
ShowUninstDetails NeverShow
# INCLUDES #
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "nsDialogs.nsh"
!Include "WinMessages.nsh"
!include "WordFunc.nsh"
!include "FileFunc.nsh"
# STYLE & ICON #
BrandingText ` `
# PAGE #
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
Page custom "Page.Test" "Page.Test.Leave"
Page instfiles "" "InstFilesPageShow"
Page custom "Page.Complete"
# LANGUAGE #
!insertmacro MUI_LANGUAGE English
# INIT #
Function .onInit
InitPluginsDir
SetOverwrite try
AllowSkipFiles off
FunctionEnd
# GUI #
Function onGUIInit
MoveAnywhere::Hook
System::Call user32::SetWindowLong(i$HWNDPARENT,i-16,0x9480084C)i.R0
GetDlgItem $0 $HWNDPARENT 1034
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1035
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1036
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1037
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1038
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1039
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1256
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1028
ShowWindow $0 ${SW_HIDE}
System::Call user32::GetSystemMetrics(i0)i.r1
System::Call user32::GetSystemMetrics(i1)i.r2
IntOp $1 $1 - 656
IntOp $1 $1 / 2
IntOp $2 $2 - 495
IntOp $2 $2 / 2
System::Call user32::MoveWindow(i$HWNDPARENT,i$1,i$2,i656,i495,1)
System::Alloc 16
System::Call user32::GetWindowRect(i$HWNDPARENT,isR0)
System::Call *$R0(i.R1,i.R2,i.R3,i.R4)
IntOp $R3 $R3 - $R1
IntOp $R4 $R4 - $R2
System::Call gdi32::CreateRoundRectRgn(i0,i0,iR3,iR4,i9,i9)i.r0
System::Call user32::SetWindowRgn(i$HWNDPARENT,ir0,i1)
System::Free $R0
System::Call User32::GetDesktopWindow()i.R0
SetCtlColors $HWNDPARENT "0xFFFFFF" "0xFF8C00"
FunctionEnd
# WELCOME #
Function "Page.Test"
var /GLOBAL Dialog
var /GLOBAL Lbl.Welcome
var /GLOBAL Btn_Close
var /GLOBAL Btn_Next
var /GLOBAL Lbl.Database
var /GLOBAL PATH_DATABASE
var /GLOBAL DATABASE
var /GLOBAL Lbl.Show.Database
var /GLOBAL GroupBox
GetDlgItem $0 $HWNDPARENT 1
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 2
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 3
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1990
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1991
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1992
ShowWindow $0 ${SW_HIDE}
System::Call "user32::SetWindowPos(i$HWNDPARENT,i,i,i,i 656,i 495,i 0x16)"
nsDialogs::Create /NOUNLOAD 1044
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
System::Call "user32::MoveWindow(i$Dialog,i0,i0,i 656,i 495,i0)"
SetCtlColors $Dialog "0xFFFFFF" "0xFF8C00"
# WELCOME #
nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 2% 1% 60% 4% "Welcome!"
Pop $Lbl.Welcome
CreateFont $0 "$(^Font)" 14 300
SendMessage $Lbl.Welcome ${WM_SETFONT} $0 0
SetCtlColors $Lbl.Welcome "0xFFFFFF" "0xFF8C00"
# CLOSE #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 95% 1% 4% 4% "x"
Pop $Btn_Close
StrCpy $1 $Btn_Close
GetFunctionAddress $3 ".onClick.Close"
nsDialogs::onClick /NOUNLOAD $1 $3
SetCtlColors $Btn_Close "0xFFFFFF" "0xFF8C00"
# DATABASE #
nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 4% 15% 60% 3% "What's the name of your database?"
Pop $Lbl.Database
SetCtlColors $Lbl.Database "0xFFFFFF" "0xFF8C00"
nsDialogs::CreateControl /NOUNLOAD EDIT 0x40000000|0x10000000|0x04000000|0x00010000|0x00000080 0 4% 20% 60% 5% ""
Pop $PATH_DATABASE
Strcpy $1 $PATH_DATABASE
GetFunctionAddress $3 ".onChange.Database"
nsDialogs::OnChange $1 $3
SendMessage $PATH_DATABASE ${WM_SETTEXT} 0 "STR:Please type here your name of database ..."
CreateFont $0 "$(^Font)" 14 300
SendMessage $PATH_DATABASE ${WM_SETFONT} $0 0
SetCtlColors $PATH_DATABASE "0xFFFFFF" "0xffa332"
nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 65% 21% 30% 3% ""
Pop $Lbl.Show.Database
SetCtlColors $Lbl.Show.Database "0xFFFFFF" "0xFF8C00"
# NEXT #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 35% 92% 25% 6% "$(^NextBtn)"
Pop $Btn_Next
StrCpy $1 $Btn_Next
GetFunctionAddress $3 ".onClick.Next"
nsDialogs::onClick /NOUNLOAD $1 $3
EnableWindow $Btn_Next 0
SetCtlColors $Btn_Next "0xFFFFFF" "0xFF8C00"
# Groupbox #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00000007 0x00000080 2% 8% 96% 80% ""
Pop $GroupBox
SetCtlColors $GroupBox "0xFFFFFF" "0xFF8C00"
nsDialogs::Show
FunctionEnd
# DATABASE #
Function ".onChange.Database"
Pop $PATH_DATABASE
${NSD_GetText} $PATH_DATABASE $0
StrCpy $DATABASE "$0"
SendMessage $Lbl.Show.Database ${WM_SETTEXT} 0 "STR:Database: $DATABASE"
${If} $DATABASE != "1"
EnableWindow $Btn_Next 1
${Else}
EnableWindow $Btn_Next 0
${EndIf}
FunctionEnd
# NEXT #
Function ".onClick.Next"
StrCpy $R9 1
SendMessage $HWNDPARENT 0x408 1 0
Abort
FunctionEnd
# LEAVE #
Function "Page.Test.Leave"
${NSD_GetText} $PATH_DATABASE $0
${If} $0 != "$DATABASE"
MessageBox MB_OK "The database $DATABASE has been added successfully!"
${EndIf}
FunctionEnd
# CLOSE #
Function ".onClick.Close"
SendMessage $HWNDPARENT ${WM_CLOSE} 0 0
FunctionEnd
Function "InstFilesPageShow"
FindWindow $R2 "#32770" "" $HWNDPARENT
ShowWindow $0 ${SW_HIDE}
GetDlgItem $1 $R2 1027
ShowWindow $1 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1
EnableWindow $0 0
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 2
EnableWindow $0 0
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 3
EnableWindow $0 0
ShowWindow $0 ${SW_HIDE}
# ...:: SIZE WINDOW ::... #
StrCpy $R0 $R2
System::Call "user32::MoveWindow(i R0, i 0, i 0, i 656, i 495) i r2"
# ...:: SHOW DETAILS ::... #
GetDlgItem $1 $R2 1027
StrCpy $0 $1
System::Call user32::SetWindowPos(i$1,i0,i620,i6,i0,i0,i0x0001)
System::Call user32::SetWindowPos(i$1,i0,i0,i0,i22,i22,i0x0002)
System::Call "user32::SetWindowText(i $1, t $\"x")"
ShowWindow $1 ${SW_SHOW}
EnableWindow $1 1
SetCtlColors $1 "0xFFFFFF" "0xFF8C00"
# ...:: PROGRESSBAR ::... #
GetDlgItem $R0 $R2 1004
SetCtlColors $R2 "0xFFFFFF" "0xFF8C00"
System::Call "user32::MoveWindow(i R0, i 25, i 400, i 605, i 6) i r2"
# ...:: DETAILPRINT ::... #
GetDlgItem $R1 $R2 1006
SetCtlColors $R1 "0xFFFFFF" "0xFF8C00"
System::Call "user32::MoveWindow(i R1, i 25, i 370, i 605, i 20) i r2"
CreateFont $1 "$(^Font)" "$(^FontSize)"
SendMessage $R1 ${WM_SETFONT} $1 0
# ...:: SHOW DETAIL::... #
GetDlgItem $R8 $R2 1016
SetCtlColors $R8 "0xFFFFFF" "0xFF8C00"
System::Call "user32::MoveWindow(i R8, i 25, i 80, i 605, i 250) i r2"
# ...:: SKIN PROGRESS ::... #
FindWindow $R2 "#32770" "" $HWNDPARENT
GetDlgItem $5 $R2 1004
# ...:: TITLE ::... #
FindWindow $R0 "#32770" "" $HWNDPARENT
System::Call 'User32::CreateWindowEx(i 0, t "STATIC", t "Welcome!", i ${WS_CHILD}|${WS_VISIBLE}|${WS_EX_TRANSPARENT}, i 10, i 8, i 580, i 35, i R0, i 0, i 0, i 0) i.R1'
CreateFont $1 "$(^Font)" "18" "500"
SendMessage $R1 ${WM_SETFONT} $1 0
SetCtlColors $R1 "0xFFFFFF" "0xFF8C00"
# ...:: GROUPBOX ::... #
FindWindow $R0 "#32770" "" $HWNDPARENT
System::Call 'User32::CreateWindowEx(i0,t"BUTTON",t"",i${BS_GROUPBOX}|${WS_CHILD}|${WS_VISIBLE},i10,i40,i635,i400,i$R0,i0X1042,i0,i0) i.R4'
SetCtlColors $R4 "0xFFFFFF" "0xFF8C00"
FunctionEnd
# SECTION #
Section "MAIN" SEC01
DetailPrint `Installing ... Please wait ...`
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Sleep 1000
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Sleep 1000
Sleep 500
Sleep 500
Sleep 500
Sleep 500
Setautoclose "True"
SectionEnd
#...:: FINISH ::... #
Function "Page.Complete"
var /GLOBAL Lbl.Finish
var /GLOBAL Btn_Exit
GetDlgItem $0 $HWNDPARENT 1
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 2
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 3
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1990
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1991
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1992
ShowWindow $0 ${SW_HIDE}
System::Call "user32::SetWindowPos(i$HWNDPARENT,i,i,i,i 656,i 495,i 0x16)"
nsDialogs::Create /NOUNLOAD 1044
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
System::Call "user32::MoveWindow(i$Dialog,i0,i0,i 656,i 495,i0)"
SetCtlColors $Dialog "0xFFFFFF" "0xFF8C00"
# FINISH #
nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 2% 1% 60% 4% "Completed!"
Pop $Lbl.Finish
CreateFont $0 "$(^Font)" 14 300
SendMessage $Lbl.Finish ${WM_SETFONT} $0 0
SetCtlColors $Lbl.Finish "0xFFFFFF" "0xFF8C00"
# CLOSE #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 95% 1% 4% 4% "x"
Pop $Btn_Close
StrCpy $1 $Btn_Close
GetFunctionAddress $3 ".OnClick.Finish"
nsDialogs::onClick /NOUNLOAD $1 $3
SetCtlColors $Btn_Close "0xFFFFFF" "0xFF8C00"
# EXIT #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 35% 92% 25% 6% "$(^CloseBtn)"
Pop $Btn_Exit
StrCpy $1 $Btn_Exit
GetFunctionAddress $3 ".OnClick.Finish"
nsDialogs::onClick /NOUNLOAD $1 $3
SetCtlColors $Btn_Exit "0xFFFFFF" "0xFF8C00"
# Groupbox #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00000007 0x00000080 2% 8% 96% 80% ""
Pop $GroupBox
SetCtlColors $GroupBox "0xFFFFFF" "0xFF8C00"
nsDialogs::Show
FunctionEnd
# ...:: Finish ::... #
Function ".OnClick.Finish"
SendMessage $HWNDPARENT 0x408 1 0
FunctionEnd
# END #
Function .onGUIEnd
FunctionEnd