2023年12月3日发(作者:)

NSIS自定义界面布局简介(学习四);自定义欢迎页面Page custom WelcomePage;初始化必须要调用的组件Function .onInit InitPluginsDir ;Call DiskFrameWorkSpaceCheck ;检测磁盘 ;Call DefineReadINI #读取INI文件中的内容 Call IsProgramRunning #检测程序是否正在运行 Call CompareVersion #检查程序的版本号

;显示动态的图片 File `/oname=$` `` File `/oname=$PLUGINSDIRloading_` `imagesloading_` File `/oname=$PLUGINSDIRloading_` `imagesloading_` File `/oname=$PLUGINSDIRloading_` `imagesloading_` File `/oname=$PLUGINSDIRloading_` `imagesloading_` File `/oname=$` `` File `/oname=$` `` ;背景图片 File `/ONAME=$` `` ;顶部图片 File `/ONAME=$` `` File `/ONAME=$` `` ;关闭按钮 File `/oname=$PLUGINSDIRbtn_` `imagesbtn_` ;立即安装的图片 File `/oname=$PLUGINSDIRbtn_` `imagesbtn_` ;退出的背景图片 File `/ONAME=$` `` ;改变路径的按钮图片 File `/oname=$PLUGINSDIRbtn_` `imagesbtn_` File `/oname=$PLUGINSDIRbtn_` `imagesbtn_` File `/oname=$` `` File `/oname=$` `` ;安装界面的图片 File `/oname=$` `` File `/oname=$` `` File `/oname=$` `` #更改路径的界面 File `/oname=$PLUGINSDIRbtn_` `imagesbtn_` #安装完成界面 File `/oname=$PLUGINSDIRbg_` `imagesbg_` ;安装完成的背景图片 File `/oname=$PLUGINSDIRbtn_` `imagesbtn_`

SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$" SkinBtn::Init "$" SkinBtn::Init "$PLUGINSDIRbtn_" SkinBtn::Init "$PLUGINSDIRbtn_"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}FunctionEndFunction onWarningGUICallback ${If} $MSG = ${WM_LBUTTONDOWN} SendMessage $WarningForm ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0 ${EndIf}FunctionEnd;关闭函数Function SkinBtn_Close SkinBtn::Set /IMGID=$PLUGINSDIRbtn_ $1FunctionEnd;安装的函数Function SkinBtn_Install SkinBtn::Set /IMGID=$PLUGINSDIRbtn_ $1FunctionEnd;自定义的欢迎页面 (如果此页面为空,则会调用原来的默认的页面)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 508 296 ;改变窗体大小 ${NSW_SetWindowSize} $0 508 296 ;改变Page大小

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

;立即安装的按钮 ;${NSD_CreateButton} 240 260 88 25 "" ${NSD_CreateButton} 183 225 153 39 "" Pop $Btn_Install StrCpy $1 $Btn_Install Call SkinBtn_Install EnableWindow $Btn_Install 1 ;定义的一个Bool值,用于是否显示 ;StrCpy $Bool_Install 1 GetFunctionAddress $3 OnClick_Install SkinBtn::onClick $1 $3

;右下方更改安装路径的控件使用 ${NSD_CreateButton} 400 280 95 15 "" Pop $Btn_LoadPath StrCpy $1 $Btn_LoadPath Call SkinBtn_Modify GetFunctionAddress $3 OnClick_Modify SkinBtn::onClick $1 $3 ;StrCpy $Bool_License 0 ;初始化值为0

;CheckBox选中项 ${NSD_CreateButton} 23 280 15 15 "" Pop $Ck_AgreeLicense StrCpy $1 $Ck_AgreeLicense Call SkinBtn_Checked GetFunctionAddress $3 OnClick_CheckAgreeLicense SkinBtn::onClick $1 $3 StrCpy $Bool_AgreeLicense 1 ${NSD_CreateLabel} 43 280 100 15 "我已阅读并同意" Pop $Lbl_AgreeLicense SetCtlColors $Lbl_AgreeLicense "" transparent ;背景设成透明

;checkBox按钮右侧的许可协议按钮,点击这个按钮可以打开html连接,显示网页的效果 ${NSD_CreateButton} 130 280 100 15 "" Pop $Btn_LoadPath StrCpy $1 $Btn_LoadPath Call SkinBtn_HtmlLicense GetFunctionAddress $3 onClickHtmlLicense SkinBtn::onClick $1 $3 ;界面的上方图片 ${NSD_CreateBitmap} 0 0 520 230 "" Pop $TopImage ${NSD_SetImage} $TopImage $ $ImageHandle ;贴背景大图 ${NSD_CreateBitmap} 0 0 100% 100% "" Pop $BGImage ;${NSD_SetImage} $BGImage $ $ImageHandle ${NSD_SetImage} $BGImage $ $ImageHandle

GetFunctionAddress $0 onGUICallback WndProc::onCallback $BGImage $0 ;处理无边框窗体移动 nsDialogs::Show ${NSD_FreeImage} $ImageHandle ;当加上以下的代码后,背景图片以及界面的上方图片显示出来 GetFunctionAddress $0 onGUICallback WndProc::onCallback $BGImage $0 ;处理无边框窗体移动 nsDialogs::Show ;释放背景图片的语句 ${NSD_FreeImage} $ImageHandleFunctionEndSection Uninstall ;删除任务栏快捷方式 ExecShell "taskbarunpin" "$" ;删除桌面的快捷方式 Delete "$" Delete "$" ; 删除自己 Delete "$" RMDir "$SMPROGRAMSpkpm" ;RMDir "$INSTDIR" RMDir /r "$INSTDIR" ;DeleteRegKey HKLM "$PRODUCT_UNINST_KEY" DeleteRegKey HKLM "${PRODUCT_INSTALL_KEY}" SetAutoClose trueSectionEnd