NSIS总脚本代码参考

NSIS总脚本代码参考

注:参考博客:http://blog.csdn.net/taiyang1987912/article/details/40506439

Var MSG
Var Dialog

Var BGImage
Var MiddleImage         
Var ImageHandle
Var Btn_Next
Var Btn_Cancel
Var Btn_Agreement
Var Bool_License
Var Txt_License
Var Btn_Close
Var WarningForm

Var Ck_ShortCut
Var Bool_ShortCut
Var Lbl_ShortCut

Var Ck_AutoRun
Var Bool_AutoRun
Var Lbl_AutoRun

Var Ck_FinishPage
Var Bool_FinishPage
Var Lbl_FinishPage

Var Btn_Install

Var Txt_Browser
Var Btn_Browser

Var Btn_DetailsPrint
Var UDetailsPrint   ;详细输入文字
Var Txt_DetailsPrint  ;详细文字框控件
Var Bool_DetailsPrint ;记录是否显示详细信息文本框

Var Lbl_Sumary
Var PB_ProgressBar

Var WebImg ;网页控件

Var Ck_Weibo
Var Bool_Weibo
Var Lbl_Weibo
Var Btn_Complete




;---------------------------全局编译脚本预定义的常量-----------------------------------------------------
!define  EM_BrandingText "testtest"
; MUI 预定义常量
!define MUI_ABORTWARNING
;安装图标的路径名字
!define MUI_ICON "images\fav.ico"
;卸载图标的路径名字
!define MUI_UNICON "images\fav.ico"
;产品协议书的路径名字
;!define MUI_PAGE_LICENSE_RTY "license\license.rtf"
!define EM_OUTFILE_NAME "test.exe"

;---------------------------设置软件压缩类型(也可以通过外面编译脚本控制)------------------------------------
SetCompressor lzma
BrandingText "${EM_BrandingText}"
SetCompress force
XPStyle on
; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
!include "MUI2.nsh"
!include "WinCore.nsh"
;引用文件函数头文件
!include "FileFunc.nsh"
!include "nsWindows.nsh"
!include "LoadRTF.nsh"
!include "WinMessages.nsh"

!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit

;自定义页面
Page custom WelcomePage
Page custom InstallationPage
Page custom LoadingPage
Page custom CompletePage

; 许可协议页面
!define MUI_LICENSEPAGE_CHECKBOX

; 安装目录选择页面
!insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安装完成页面
!insertmacro MUI_PAGE_FINISH
; 安装卸载过程页面
!insertmacro MUI_UNPAGE_INSTFILES
; 安装界面包含的语言设置
!insertmacro MUI_LANGUAGE "SimpChinese"

;------------------------------------------------------MUI 现代界面定义以及函数结束------------------------
;应用程序显示名字
Name "test"
;应用程序输出路径
OutFile "${EM_OUTFILE_NAME}"
InstallDir "$PROGRAMFILES\test"

Function .onInit
    InitPluginsDir
    File `/ONAME=$PLUGINSDIR\bg.bmp` `images\bg.bmp`
    File `/ONAME=$PLUGINSDIR\quit.bmp` `images\quit.bmp`
    File `/ONAME=$PLUGINSDIR\select.bmp` `images\select.bmp`
    File `/ONAME=$PLUGINSDIR\welcome.bmp` `images\welcome.bmp`
        File `/ONAME=$PLUGINSDIR\btn_next.bmp` `images\btn_next.bmp`
        File `/oname=$PLUGINSDIR\btn_agreement1.bmp` `images\btn_agreement1.bmp`
    File `/oname=$PLUGINSDIR\btn_agreement2.bmp` `images\btn_agreement2.bmp`
    File `/oname=$PLUGINSDIR\license.rtf` `license\license.rtf`
    File `/oname=$PLUGINSDIR\btn_close.bmp` `images\btn_close.bmp`
    File `/oname=$PLUGINSDIR\btn_cancel.bmp` `images\btn_cancel.bmp`
    File `/oname=$PLUGINSDIR\checkbox1.bmp` `images\checkbox1.bmp`
    File `/oname=$PLUGINSDIR\checkbox2.bmp` `images\checkbox2.bmp`
    File `/oname=$PLUGINSDIR\btn_quit.bmp` `images\btn_quit.bmp`
    File `/oname=$PLUGINSDIR\btn_install.bmp` `images\btn_install.bmp`
    File `/oname=$PLUGINSDIR\btn_change.bmp` `images\btn_change.bmp`

    File `/oname=$PLUGINSDIR\index.htm` `images\index.htm`
    File `/oname=$PLUGINSDIR\loading_pic1.bmp` `images\loading_pic1.bmp`
    File `/oname=$PLUGINSDIR\loading_pic2.bmp` `images\loading_pic2.bmp`
    File `/oname=$PLUGINSDIR\loading_pic3.bmp` `images\loading_pic3.bmp`
    File `/oname=$PLUGINSDIR\loading_pic4.bmp` `images\loading_pic4.bmp`
    File `/oname=$PLUGINSDIR\installation.bmp` `images\installation.bmp`

    File `/oname=$PLUGINSDIR\loading1.bmp` `images\loading1.bmp`
    File `/oname=$PLUGINSDIR\loading2.bmp` `images\loading2.bmp`
    File `/oname=$PLUGINSDIR\btn_complete.bmp` `images\btn_complete.bmp`
    File `/oname=$PLUGINSDIR\success.bmp` `images\success.bmp`

        SkinBtn::Init "$PLUGINSDIR\btn_next.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_agreement1.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_agreement2.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_close.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_cancel.bmp"
        SkinBtn::Init "$PLUGINSDIR\checkbox1.bmp"
        SkinBtn::Init "$PLUGINSDIR\checkbox2.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_quit.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_install.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_change.bmp"
        SkinBtn::Init "$PLUGINSDIR\btn_complete.bmp"

FunctionEnd

Function onGUIInit
    ;消除边框
    System::Call `user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},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}
FunctionEnd

;处理无边框移动
Function onGUICallback
  ${If} $MSG = ${WM_LBUTTONDOWN}
    SendMessage $HWNDPARENT ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0
  ${EndIf}
FunctionEnd

Function onWarningGUICallback
  ${If} $MSG = ${WM_LBUTTONDOWN}
    SendMessage $WarningForm ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0
  ${EndIf}
FunctionEnd

;协议按钮事件
Function onClickAgreement
    ${IF} $Bool_License == 1
        ShowWindow $Txt_License ${SW_HIDE}
        ShowWindow $MiddleImage ${SW_SHOW}
        IntOp $Bool_License $Bool_License - 1
        StrCpy $1 $Btn_Agreement
        Call SkinBtn_Agreement1
    ${ELSE}
      ShowWindow $Txt_License ${SW_SHOW}
      ShowWindow $MiddleImage ${SW_HIDE}
        IntOp $Bool_License $Bool_License + 1
        StrCpy $1 $Btn_Agreement
        Call SkinBtn_Agreement2
    ${EndIf}
FunctionEnd

;-----------------------------------------皮肤贴图方法----------------------------------------------------
Function SkinBtn_Next
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_next.bmp $1
FunctionEnd

Function SkinBtn_Agreement1
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_agreement1.bmp $1
FunctionEnd

Function SkinBtn_Agreement2
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_agreement2.bmp $1
FunctionEnd

Function SkinBtn_Close
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_close.bmp $1
FunctionEnd

Function SkinBtn_Cancel
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_cancel.bmp $1
FunctionEnd

Function SkinBtn_Checked
  SkinBtn::Set /IMGID=$PLUGINSDIR\checkbox2.bmp $1
FunctionEnd

Function SkinBtn_UnChecked
  SkinBtn::Set /IMGID=$PLUGINSDIR\checkbox1.bmp $1
FunctionEnd

Function SkinBtn_Quit
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_quit.bmp $1
FunctionEnd

Function SkinBtn_Install
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_install.bmp $1
FunctionEnd

Function SkinBtn_Browser
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_change.bmp $1
FunctionEnd

Function SkinBtn_DetailsPrint1
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_installlist1.bmp $1
FunctionEnd

Function SkinBtn_DetailsPrint2
  SkinBtn::Set /IMGID=$PLUGINSDIR\btn_installlist2.bmp $1
FunctionEnd

Function SkinBtn_Complete
    SkinBtn::Set /IMGID=$PLUGINSDIR\btn_complete.bmp $1
FunctionEnd

Function OnClickQuitOK
    Call onClickClose
FunctionEnd

Function OnClick_CheckShortCut
  ${IF} $Bool_ShortCut == 1
        IntOp $Bool_ShortCut $Bool_ShortCut - 1
        StrCpy $1 $Ck_ShortCut
        Call SkinBtn_UnChecked
    ${ELSE}
        IntOp $Bool_ShortCut $Bool_ShortCut + 1
        StrCpy $1 $Ck_ShortCut
        Call SkinBtn_Checked
    ${EndIf}
FunctionEnd

Function OnClick_CheckAutoRun
  ${IF} $Bool_AutoRun == 1
        IntOp $Bool_AutoRun $Bool_AutoRun - 1
        StrCpy $1 $Ck_AutoRun
        Call SkinBtn_UnChecked
    ${ELSE}
        IntOp $Bool_AutoRun $Bool_AutoRun + 1
        StrCpy $1 $Ck_AutoRun
        Call SkinBtn_Checked
    ${EndIf}
FunctionEnd

Function OnClick_CheckFinishPage
  ${IF} $Bool_FinishPage == 1
        IntOp $Bool_FinishPage $Bool_FinishPage - 1
        StrCpy $1 $Ck_FinishPage
        Call SkinBtn_UnChecked
    ${ELSE}
        IntOp $Bool_FinishPage $Bool_FinishPage + 1
        StrCpy $1 $Ck_FinishPage
        Call SkinBtn_Checked
    ${EndIf}
FunctionEnd

;点击右上角关闭按钮
Function onClickClose
    FindProcDLL::FindProc "test.exe"
    Sleep 500
    Pop $R0
    ${If} $R0 != 0
    KillProcDLL::KillProc "test.exe"
    ${EndIf}
FunctionEnd

;处理页面跳转的命令
Function RelGotoPage
  IntCmp $R9 0 0 Move Move
    StrCmp $R9 "X" 0 Move
      StrCpy $R9 "120"
  Move:
  SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd

;下一步按钮事件
Function onClickNext
  StrCpy $R9 1 ;Goto the next page
  Call RelGotoPage
  Abort
FunctionEnd

;点击安装按钮
Function OnClick_Install
    StrCpy $R9 1 ;Goto the next page
    Call RelGotoPage
FunctionEnd

Function OnClickQuitCancel
  ${NSW_DestroyWindow} $WarningForm
  EnableWindow $hwndparent 1
  BringToFront
FunctionEnd

Function onCancel
    IsWindow $WarningForm Create_End
    !define Style ${WS_VISIBLE}|${WS_OVERLAPPEDWINDOW}
    ${NSW_CreateWindowEx} $WarningForm $hwndparent ${ExStyle} ${Style} "" 1018

    ${NSW_SetWindowSize} $WarningForm 349 184
    EnableWindow $hwndparent 0
    System::Call `user32::SetWindowLong(i$WarningForm,i${GWL_STYLE},0x9480084C)i.R0`
    ${NSW_CreateButton} 148 122 88 25 ''
    Pop $R0
    StrCpy $1 $R0
    Call SkinBtn_Quit
    ${NSW_OnClick} $R0 OnClickQuitOK

    ${NSW_CreateButton} 248 122 88 25 ''
    Pop $R0
    StrCpy $1 $R0
    Call SkinBtn_Cancel
    ${NSW_OnClick} $R0 OnClickQuitCancel

    ${NSW_CreateBitmap} 0 0 100% 100% ""
    Pop $BGImage
  ${NSW_SetImage} $BGImage $PLUGINSDIR\quit.bmp $ImageHandle
    GetFunctionAddress $0 onWarningGUICallback
    WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
  ${NSW_CenterWindow} $WarningForm $hwndparent
    ${NSW_Show}
    Create_End:
  ShowWindow $WarningForm ${SW_SHOW}
FunctionEnd

;更改目录事件
Function OnChange_DirRequest
    ;Pop $0
    ;System::Call "user32::GetWindowText($Txt_Browser,t.r0,i${NSIS_MAX_STRLEN})"
    ;StrCpy $INSTDIR $0
FunctionEnd

Function OnClick_BrowseButton
  Pop $0

  Push $INSTDIR ; input string "C:\Program Files\ProgramName"
  Call GetParent
  Pop $R0 ; first part "C:\Program Files"

  Push $INSTDIR ; input string "C:\Program Files\ProgramName"
  Push "\" ; input chop char
  Call GetLastPart
  Pop $R1 ; last part "ProgramName"

  nsDialogs::SelectFolderDialog "请选择 $R0 安装的文件夹:" "$R0"
  Pop $0
  ${If} $0 == "error" # returns 'error' if 'cancel' was pressed?
    Return
  ${EndIf}
  ${If} $0 != ""
    StrCpy $INSTDIR "$0\$R1"
    system::Call `user32::SetWindowText(i $Txt_Browser, t "$INSTDIR")`
  ${EndIf}
FunctionEnd
; Usage:
; Push "C:\Program Files\Directory\Whatever"
; Call GetParent
; Pop $R0 ; $R0 equal "C:\Program Files\Directory"
;得到选中目录用于拼接安装程序名称
Function GetParent
  Exch $R0 ; input string
  Push $R1
  Push $R2
  Push $R3
  StrCpy $R1 0
  StrLen $R2 $R0
  loop:
    IntOp $R1 $R1 + 1
    IntCmp $R1 $R2 get 0 get
    StrCpy $R3 $R0 1 -$R1
    StrCmp $R3 "\" get
    Goto loop
  get:
    StrCpy $R0 $R0 -$R1
    Pop $R3
    Pop $R2
    Pop $R1
    Exch $R0 ; output string
FunctionEnd

; Usage:
; Push $INSTDIR ; input string "C:\Program Files\ProgramName"
; Push "\" ; input chop char
; Call GetLastPart
; Pop $R1 ; last part "ProgramName"
;截取选中目录
Function GetLastPart
  Exch $0 ; chop char
  Exch
  Exch $1 ; input string
  Push $2
  Push $3
  StrCpy $2 0
  loop:
    IntOp $2 $2 - 1
    StrCpy $3 $1 1 $2
    StrCmp $3 "" 0 +3
      StrCpy $0 ""
      Goto exit2
    StrCmp $3 $0 exit1
    Goto loop
  exit1:
    IntOp $2 $2 + 1
    StrCpy $0 $1 "" $2
  exit2:
    Pop $3
    Pop $2
    Pop $1
    Exch $0 ; output string
FunctionEnd

;详细安装事件
Function onClickDetailsPrint
    ${IF} $Bool_DetailsPrint == 1
        ShowWindow $WebImg ${SW_SHOW}
        ShowWindow $Txt_DetailsPrint ${SW_HIDE}
        IntOp $Bool_DetailsPrint $Bool_DetailsPrint - 1
        StrCpy $1 $Btn_DetailsPrint
        Call SkinBtn_DetailsPrint1
    ${ELSE}
        ShowWindow $WebImg ${SW_HIDE}
        ShowWindow $Txt_DetailsPrint ${SW_SHOW}
        IntOp $Bool_DetailsPrint $Bool_DetailsPrint + 1
        StrCpy $1 $Btn_DetailsPrint
        Call SkinBtn_DetailsPrint2
    ${EndIf}
FunctionEnd

Function NSD_TimerFun
    GetFunctionAddress $0 NSD_TimerFun
    nsDialogs::KillTimer $0
    !if 1   ;是否在后台运行,1有效
        GetFunctionAddress $0 InstallationMainFun
        BgWorker::CallAndWait
    !else
        Call InstallationMainFun
    !endif
FunctionEnd

Function OnClick_CheckWeibo
    ${IF} $Bool_Weibo == 1
        IntOp $Bool_Weibo $Bool_Weibo - 1
        StrCpy $1 $Ck_Weibo
        Call SkinBtn_UnChecked
    ${ELSE}
        IntOp $Bool_Weibo $Bool_Weibo + 1
        StrCpy $1 $Ck_Weibo
        Call SkinBtn_Checked
    ${EndIf}
FunctionEnd

;点击最后完成
Function onClickComplete

    ;判断是否添加桌面快捷方式
    ${If} $Bool_ShortCut == 1
      ;CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\test.exe"
    ${EndIf}
    ;判断是否开机运行程序
    ${If} $Bool_AutoRun == 1
      ;CreateShortCut "$QUICKLAUNCH\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTE_NAME}"
      ;CreateShortCut "$SMSTARTUP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTE_NAME}"
    ${EndIf}
    ;判断是否打开网站
    ${If} $Bool_FinishPage == 1
        ExecShell open "http://www.pylife.net"
    ${EndIf}
    ;判断是否立即运行程序
    ${If} $Bool_Weibo == 1
      ExecShell open "http://weibo.com/pylife"
      ShowWindow $HWNDPARENT ${SW_HIDE}
      GetFunctionAddress $0 onClickClose
      BgWorker::CallAndWait
        ${ELSE}
          ShowWindow $HWNDPARENT ${SW_HIDE}
      Call onClickClose
    ${EndIf}
FunctionEnd

Function InstallationMainFun


    SendMessage $PB_ProgressBar ${PBM_SETRANGE32} 0 100  ;总步长为顶部定义值
        SendMessage $PB_ProgressBar ${PBM_SETPOS} 10 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 20 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 30 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 40 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 50 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 60 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 70 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 80 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 90 0
    Sleep 1000
    SendMessage $PB_ProgressBar ${PBM_SETPOS} 100 0

    ShowWindow $Btn_Next ${SW_SHOW}
        ShowWindow $Btn_Install ${SW_HIDE}
        EnableWindow $Btn_Cancel 0


FunctionEnd



Function WelcomePage
    GetDlgItem $0 $HWNDPARENT 1
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 2
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 3
    ShowWindow $0 ${SW_HIDE}

    nsDialogs::Create 1044
    Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
    SetCtlColors $0 ""  transparent ;背景设成透明

    ${NSW_SetWindowSize} $HWNDPARENT 513 354 ;改变窗体大小
    ${NSW_SetWindowSize} $0 513 354 ;改变Page大小

    ;读取RTF的文本框
        nsDialogs::CreateControl "RichEdit20A" \
    ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} \
        ${WS_EX_STATICEDGE}  5 35 501 216 ''
    Pop $Txt_License
        ${LoadRTF} '$PLUGINSDIR\license.rtf' $Txt_License
    ShowWindow $Txt_License ${SW_HIDE}


    ;下一步
    ${NSD_CreateButton} 320 315 88 25 ""
        Pop $Btn_Next
        StrCpy $1 $Btn_Next
        Call SkinBtn_Next
        GetFunctionAddress $3 onClickNext
    SkinBtn::onClick $1 $3

        ;取消
    ${NSD_CreateButton} 417 315 88 25 ""
    Pop $Btn_Cancel
    StrCpy $1 $Btn_Cancel
    Call SkinBtn_Cancel
    GetFunctionAddress $3 onCancel
  SkinBtn::onClick $1 $3

    ;关闭按钮
  ${NSD_CreateButton} 490 8 15 15 ""
    Pop $Btn_Close
    StrCpy $1 $Btn_Close
    Call SkinBtn_Close
  GetFunctionAddress $3 onCancel
  SkinBtn::onClick $1 $3

    ;用户协议
        ${NSD_CreateButton} 181 273 95 15 ""
        Pop $Btn_Agreement
        StrCpy $1 $Btn_Agreement
        Call SkinBtn_Agreement1
      GetFunctionAddress $3 onClickAgreement
      SkinBtn::onClick $1 $3
        StrCpy $Bool_License 0 ;初始化值为0

    ;贴小图
    ${NSD_CreateBitmap} 1 31 511 226 ""
    Pop $MiddleImage
    ${NSD_SetImage} $MiddleImage $PLUGINSDIR\welcome.bmp $ImageHandle
    ;ShowWindow $MiddleImage ${SW_HIDE}

    ;贴背景大图
    ${NSD_CreateBitmap} 0 0 100% 100% ""
    Pop $BGImage
    ${NSD_SetImage} $BGImage $PLUGINSDIR\bg.bmp $ImageHandle

    GetFunctionAddress $0 onGUICallback
    WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
    nsDialogs::Show
    ${NSD_FreeImage} $ImageHandle
FunctionEnd

Function InstallationPage
  GetDlgItem $0 $HWNDPARENT 1
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 2
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 3
  ShowWindow $0 ${SW_HIDE}

    nsDialogs::Create 1044
    Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
    SetCtlColors $0 ""  transparent ;背景设成透明

    ${NSW_SetWindowSize} $HWNDPARENT 520 350 ;改变自定义窗体大小
    ${NSW_SetWindowSize} $0 520 350 ;改变自定义Page大小

    ;更改目录控件创建
    ${NSD_CreateDirRequest} 26 79 358 25 "$INSTDIR"
    Pop $Txt_Browser
    ${NSD_OnChange} $Txt_Browser OnChange_DirRequest

    ${NSD_CreateBrowseButton} 400 79 88 25 ""
    Pop $Btn_Browser
    StrCpy $1 $Btn_Browser
    Call SkinBtn_Browser
    GetFunctionAddress $3 OnClick_BrowseButton
  SkinBtn::onClick $1 $3



    ;CheckBox选中项
    ${NSD_CreateButton} 26 150 15 15 ""
    Pop $Ck_ShortCut
    StrCpy $1 $Ck_ShortCut
    Call SkinBtn_Checked
    GetFunctionAddress $3 OnClick_CheckShortCut
    SkinBtn::onClick $1 $3
    StrCpy $Bool_ShortCut 1
    ${NSD_CreateLabel} 45 151 100 15 "添加桌面快捷方式"
    Pop $Lbl_ShortCut
    SetCtlColors $Lbl_ShortCut ""  transparent ;背景设成透明

    ${NSD_CreateButton} 26 180 15 15 ""
    Pop $Ck_AutoRun
    StrCpy $1 $Ck_AutoRun
    Call SkinBtn_Checked
    GetFunctionAddress $3 OnClick_CheckAutoRun
    SkinBtn::onClick $1 $3
    StrCpy $Bool_AutoRun 1
    ${NSD_CreateLabel} 45 181 175 15 "开机自动运行程序"
    Pop $Lbl_AutoRun
    SetCtlColors $Lbl_AutoRun ""  transparent ;背景设成透明

  ${NSD_CreateButton} 26 210 15 15 ""
    Pop $Ck_FinishPage
    StrCpy $1 $Ck_FinishPage
    Call SkinBtn_Checked
    GetFunctionAddress $3 OnClick_CheckFinishPage
  SkinBtn::onClick $1 $3
    StrCpy $Bool_FinishPage 1
  ${NSD_CreateLabel} 45 211 300 15 "安装完毕后打开烂菜的网站http://www.pylife.net"
  Pop $Lbl_FinishPage
  SetCtlColors $Lbl_FinishPage ""  transparent ;背景设成透明

    ;安装
    ${NSD_CreateButton} 320 315 88 25 ""
        Pop $Btn_Install
        StrCpy $1 $Btn_Install
        Call SkinBtn_Install
        GetFunctionAddress $3 OnClick_Install
      SkinBtn::onClick $1 $3

        ;取消
        ${NSD_CreateButton} 417 315 88 25 ""
        Pop $Btn_Cancel
        StrCpy $1 $Btn_Cancel
        Call SkinBtn_Cancel
        GetFunctionAddress $3 onCancel
      SkinBtn::onClick $1 $3

    ;关闭按钮
  ${NSD_CreateButton} 490 8 15 15 ""
    Pop $Btn_Close
    StrCpy $1 $Btn_Close
    Call SkinBtn_Close
  GetFunctionAddress $3 onCancel
  SkinBtn::onClick $1 $3

  ;贴背景大图
    ${NSD_CreateBitmap} 0 0 100% 100% ""
    Pop $BGImage
  ${NSD_SetImage} $BGImage $PLUGINSDIR\select.bmp $ImageHandle


    GetFunctionAddress $0 onGUICallback
    WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
    nsDialogs::Show
    ${NSD_FreeImage} $ImageHandle
FunctionEnd

;安装进度页面
Function LoadingPage
  GetDlgItem $0 $HWNDPARENT 1
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 2
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 3
  ShowWindow $0 ${SW_HIDE}

    nsDialogs::Create 1044
    Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
    SetCtlColors $0 ""  transparent ;背景设成透明

    ${NSW_SetWindowSize} $HWNDPARENT 520 350 ;改变自定义窗体大小
    ${NSW_SetWindowSize} $0 520 350 ;改变自定义Page大小

    ;Details输出文本框
    StrCpy $UDetailsPrint "开始执行安装$\r$\nhttp://www.eastmoney.com$\r$\n"
    nsDialogs::CreateControl EDIT "${__NSD_Text_STYLE}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}" "${__NSD_Text_EXSTYLE}" 10 44 500 200 $UDetailsPrint
    Pop $Txt_DetailsPrint
    ShowWindow $Txt_DetailsPrint ${SW_HIDE}
    StrCpy $Bool_DetailsPrint 0


    ;创建简要说明
    ${NSD_CreateLabel} 24 243 57 20 "正在安装"
    Pop $Lbl_Sumary
    SetCtlColors $Lbl_Sumary ""  transparent ;背景设成透明

    ${NSD_CreateProgressBar} 24 265 474 7 ""
    Pop $PB_ProgressBar
    SkinProgress::Set $PB_ProgressBar "$PLUGINSDIR\loading2.bmp" "$PLUGINSDIR\loading1.bmp"

    GetFunctionAddress $0 NSD_TimerFun
    nsDialogs::CreateTimer $0 1

    ;下一步
    ${NSD_CreateButton} 320 315 88 25 ""
    Pop $Btn_Next
    StrCpy $1 $Btn_Next
    Call SkinBtn_Next
    GetFunctionAddress $3 onClickNext
    SkinBtn::onClick $1 $3
    ShowWindow $Btn_Next ${SW_HIDE}

    ;安装
    ${NSD_CreateButton} 320 315 88 25 ""
        Pop $Btn_Install
        StrCpy $1 $Btn_Install
        Call SkinBtn_Install
          EnableWindow $Btn_Install 0

        ;取消
        ${NSD_CreateButton} 417 315 88 25 ""
        Pop $Btn_Cancel
        StrCpy $1 $Btn_Cancel
        Call SkinBtn_Cancel
        GetFunctionAddress $3 onCancel
      SkinBtn::onClick $1 $3
          EnableWindow $Btn_Cancel 0

    ;关闭按钮
  ${NSD_CreateButton} 490 8 15 15 ""
    Pop $Btn_Close
    StrCpy $1 $Btn_Close
    Call SkinBtn_Close
  GetFunctionAddress $3 onCancel
  SkinBtn::onClick $1 $3
  EnableWindow $Btn_Close 0

    System::Call `*(i,i,i,i)i(1,34,518,200).R0`
    System::Call `user32::MapDialogRect(i$HWNDPARENT,iR0)`
    System::Call `*$R0(i.s,i.s,i.s,i.s)`
    System::Free $R0
    FindWindow $R0 "#32770" "" $HWNDPARENT
    System::Call `user32::CreateWindowEx(i,t"STATIC",in,i${DEFAULT_STYLES}|${SS_BLACKRECT},i1,i34,i518,i200,iR0,i1100,in,in)i.R0`
    StrCpy $WebImg $R0
    WebCtrl::ShowWebInCtrl $WebImg "$PLUGINSDIR/index.htm"

    ;贴背景大图
    ${NSD_CreateBitmap} 0 0 100% 100% ""
    Pop $BGImage
    ${NSD_SetImage} $BGImage $PLUGINSDIR\installation.bmp $ImageHandle

    GetFunctionAddress $0 onGUICallback
    WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
    nsDialogs::Show
    ${NSD_FreeImage} $ImageHandle
FunctionEnd

Function CompletePage
    GetDlgItem $0 $HWNDPARENT 1
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 2
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 3
    ShowWindow $0 ${SW_HIDE}

    nsDialogs::Create 1044
    Pop $0
    ${If} $0 == error
        Abort
    ${EndIf}
    SetCtlColors $0 ""  transparent ;背景设成透明

    ${NSW_SetWindowSize} $HWNDPARENT 520 350 ;改变自定义窗体大小
    ${NSW_SetWindowSize} $0 520 350 ;改变自定义Page大小

    ${NSD_CreateButton} 255 163 15 15 ""
    Pop $Ck_Weibo
    StrCpy $1 $Ck_Weibo
    Call SkinBtn_Checked
    GetFunctionAddress $3 OnClick_CheckWeibo
    SkinBtn::onClick $1 $3
    StrCpy $Bool_Weibo 1
    ${NSD_CreateLabel} 273 163 300 15 "亲,粉一下呗,http://weibo.com/pylife"
    Pop $Lbl_Weibo
    SetCtlColors $Lbl_Weibo "" transparent ;背景设成透明

    ;关闭按钮
  ${NSD_CreateButton} 495 10 15 15 ""
    Pop $Btn_Close
    StrCpy $1 $Btn_Close
    Call SkinBtn_Close
  GetFunctionAddress $3 onClickComplete
  SkinBtn::onClick $1 $3

  ;完成
  ${NSD_CreateButton} 417 303 88 25 ""
    Pop $Btn_Complete
    StrCpy $1 $Btn_Complete
    Call SkinBtn_Complete
    GetFunctionAddress $2 onClickComplete
  SkinBtn::onClick $1 $2

    ;贴背景大图
    ${NSD_CreateBitmap} 0 0 100% 100% ""
    Pop $BGImage
    ${NSD_SetImage} $BGImage $PLUGINSDIR\success.bmp $ImageHandle

    GetFunctionAddress $0 onGUICallback
    WndProc::onCallback $BGImage $0 ;处理无边框窗体移动
    nsDialogs::Show
    ${NSD_FreeImage} $ImageHandle
FunctionEnd
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值