转载 http://www.it610.com/article/5021924.htm
摘要:这几天准备系统性地学习一下NSIS脚本的编写.NSIS脚本中的MessageBox,语法如下:MessageBox mb_option_list messagebox_text [/ SD return] [return_check jumpto] [return_check_2 jumpto_2] mb_option_list中列出了MessageBox的设定,有多个设定同时起作用时可用竖
这几天准备系统性地学习一下NSIS脚本的编写。
NSIS脚本中的消息框,语法如下:
MessageBox mb_option_list messagebox_text [/ SD return]
[return_check jumpto] [return_check_2 jumpto_2]
mb_option_list中列出了的MessageBox的设定,有多个设定同时起作用时可用竖线(|)隔开,messagebox_text列出了的MessageBox中正文部分显示的文字,/ SD表示静默安装时默认返回的结果,return_check,return_check_2列出了两种不同的返回值,jumpto,jumpto_2分别列出了收到两种不同返回值后应跳转到的跳转语句标签。
不同按钮的返回值如下:
1,IDABORT - 中止按钮 - 【中止】按钮
2,IDCANCEL - 取消按钮 - 【取消】按钮
3,IDIGNORE - 忽略按钮 - 【忽略】按钮
4,IDNO - 无按钮 - 【否】按钮
5,IDOK - OK按钮 - 【确定】按钮
6,IDRETRY - 重试按钮 - 【重试】按钮
7,IDYES - 是按钮 - 【是】按钮
下面这段代码,可以当做一个模板:
!define DEBUG_PATH“E:\ NSIS_Test \ TmpProgram”
!define OUTPUT_PATH“E:\ NSIS_Test \ Output”
名称“NSIS_MessageBox_Test”
标题“NSIS_MessageBox_Test”
功能.onInit
; TODO - 这里输入要测试的代码
FunctionEnd
OutFile“Galatea.exe”
“我的计划”部分
SetOutPath $ {OUTPUT_PATH}
文件/ r“$ {DEBUG_PATH} \ *。*”
SectionEnd
我使用HM NSIS编辑2.0.3工具编辑NSIS脚本,使用编译工具makensis.exe(版本号2.46)进行编译
本文中测试用的代码都写在.onInit函数中
就mb_option_list中的每个属性,我都写了段代码测试效果:
1,MB_OK - 使用OK按钮显示
MessageBox中只显示一个确定按钮
功能.onInit
;这里输入要测试的代码
MessageBox MB_OK“MB_OK - 使用OK按钮显示”/ SD IDOK IDOK label_ok
label_ok:
MessageBox MB_OK“你点击了OK”
FunctionEnd
2,MB_OKCANCEL - 显示OK和取消按钮
消息框显示确定和取消两个按钮
功能.onInit
;这里输入要测试的代码
MessageBox MB_OKCANCEL“MB_OKCANCEL - 显示确定和取消按钮”
/ SD IDOK IDOK label_ok IDCANCEL label_cancel
label_ok:
MessageBox MB_OK“你点击了OK”
转到结束
label_cancel:
MessageBox MB_OK“你点击了取消”
转到结束
结束:
FunctionEnd
3,MB_ABORTRETRYIGNORE - 显示中止,重试,忽略按钮
消息框显示中止,重试和忽略三个按钮
下面是一个错误的写法:
功能.onInit
;这里输入要测试的代码
MessageBox MB_ABORTRETRYIGNORE“MB_ABORTRETRYIGNORE - 显示中止,重试,忽略按钮”\
/ SD IDABORT IDABORT label_abort IDRETRY label_retry IDIGNORE label_ignore
label_abort:
MessageBox MB_OK“你点击了Abort”
转到结束
label_retry:
MessageBox MB_OK“你点击了重试”
转到结束
label_ignore:
MessageBox MB_OK“你点击了忽略”
转到结束
结束:
FunctionEnd
这个写法的报错信息如下:
功能:“。onInit”
MessageBox需要2-8个参数,得到10个。
用法:MessageBox模式messagebox_text [/ SD return] _
[return_check label_to_goto_if_equal [return_check2 label2]]
模式= modeflag [| modeflag [| modeflag [...]]]
modeflag =(MB_ABORTRETRYIGNORE | MB_OK | MB_OKCANCEL | MB_RETRYCANCEL | MB_YESNO | MB_YESNOCANCEL _
| MB_ICONEXCLAMATION | MB_ICONINFORMATION | MB_ICONQUESTION | MB_ICONSTOP | MB_USERICON _
| MB_TOPMOST | MB_SETFOREGROUND | MB_RIGHT
第7行脚本“E:\ NSIS_Test \ galatea.nsi”出错 - 中止创建过程
里面说的MessageBox只能有2-8个参数,在上面那段错误的代码中我们传入了10个参数。解决这一问题的方法,就是少写一个return_check条件。
功能.onInit
;这里输入要测试的代码
MessageBox MB_ABORTRETRYIGNORE“MB_ABORTRETRYIGNORE - 显示中止,重试,忽略按钮”\
/ SD IDABORT IDRETRY label_retry IDIGNORE label_ignore
MessageBox MB_OK“你点击了Abort”
转到结束
label_retry:
MessageBox MB_OK“你点击了重试”
转到结束
label_ignore:
MessageBox MB_OK“你点击了忽略”
转到结束
结束:
FunctionEnd
4,MB_RETRYCANCEL - 显示重试和取消按钮
消息框显示重试和取消两个按钮
功能.onInit
;这里输入要测试的代码
MessageBox MB_RETRYCANCEL“MB_RETRYCANCEL - 显示重试和取消按钮”\
/ SD IDRETRY IDRETRY label_retry IDCANCEL label_cancel
label_retry:
MessageBox MB_OK“你点击了重试”
转到结束
label_cancel:
MessageBox MB_OK“你点击了取消”
转到结束
结束:
FunctionEnd
5,MB_YESNO - 显示是和否按钮
消息框显示是和否两个按钮
功能.onInit
;这里输入要测试的代码
MessageBox MB_YESNO“MB_YESNO - 显示是和否按钮”\
/ SD IDYES IDYES label_yes IDNO label_no
label_yes:
MessageBox MB_OK“你点击了是”
转到结束
label_no:
MessageBox MB_OK“你点击了否”
转到结束
结束:
FunctionEnd
6,MB_YESNOCANCEL - 显示是,否,取消按钮
消息框显示是,否和取消三个按钮
功能.onInit
;这里输入要测试的代码
MessageBox MB_YESNOCANCEL“MB_YESNOCANCEL - 显示是,否,取消按钮”\
/ SD IDYES IDNO label_no IDCANCEL label_cancel
label_yes:
MessageBox MB_OK“你点击了是”
转到结束
label_no:
MessageBox MB_OK“你点击了否”
转到结束
label_cancel:
MessageBox MB_OK“你点击了取消”
转到结束
结束:
FunctionEnd
7,MB_ICONEXCLAMATION - 显示带感叹号图标
消息框显示警告标记,可与前面按钮设置相关的功能选项共用
功能.onInit
;这里输入要测试的代码
MessageBox MB_ICONEXCLAMATION“MB_ICONEXCLAMATION - 显示带感叹号图标”\
/ SD IDYES IDYes label_yes
label_yes:
MessageBox MB_OK“你点击了是”
FunctionEnd
8,MB_ICONINFORMATION - 显示信息图标
MessageBox的显示信息标记,可与前面按钮设置相关的功能选项共用
功能.onInit
;这里输入要测试的代码
MessageBox MB_ICONINFORMATION“MB_ICONINFORMATION - 显示信息图标”
/ SD IDYES IDYes label_yes
label_yes:
MessageBox MB_OK“你点击了是”
FunctionEnd
9,MB_ICONQUESTION - 显示问号图标
消息框显示询问标记,可与前面按钮设置相关的功能选项共用
功能.onInit
;这里输入要测试的代码
MessageBox MB_YESNO | MB_ICONQUESTION“MB_ICONQUESTION - 显示问号图标”\
/ SD IDYES IDYES label_yes IDNO label_no
label_yes:
MessageBox MB_OK“你点击了是”
转到结束
label_no:
MessageBox MB_OK“你点击了否”
转到结束
结束:
FunctionEnd
10,MB_ICONSTOP - 显示带停止图标
消息框显示禁止标记,可与前面按钮设置相关的功能选项共用
功能.onInit
;这里输入要测试的代码
MessageBox MB_ICONSTOP“MB_ICONSTOP - 显示带停止图标”\
/ SD IDYES IDYes label_yes
label_yes:
MessageBox MB_OK“你点击了是”
FunctionEnd
11,MB_USERICON - 显示安装程序的图标
消息框显示用户定义图标,可与前面按钮设置相关的功能选项共用
功能.onInit
;这里输入要测试的代码
MessageBox MB_USERICON“MB_USERICON - 显示安装程序的图标”\
/ SD IDYES IDYes label_yes
label_yes:
MessageBox MB_OK“你点击了是”
FunctionEnd
12,MB_TOPMOST - 使消息框最顶层
消息框提示窗置顶,可与前面的设置选项同时使用
功能.onInit
;这里输入要测试的代码
MessageBox MB_YESNO | MB_TOPMOST“MB_TOPMOST - 使消息框最顶层”
/ SD IDYES IDYES label_yes IDNO label_no
label_yes:
MessageBox MB_OK“你点击了是”
转到结束
label_no:
MessageBox MB_OK“你点击了否”
转到结束
结束:
FunctionEnd
13,MB_SETFOREGROUND - 设置前景
设置消息框为前景窗口
14,MB_RIGHT - 右对齐文字
设置消息框右对齐
功能.onInit
;这里输入要测试的代码
MessageBox MB_YESNO | MB_RIGHT“MB_RIGHT - 右对齐文本”\
/ SD IDYES IDYES label_yes IDNO label_no
label_yes:
MessageBox MB_OK“你点击了是”
转到结束
label_no:
MessageBox MB_OK“你点击了否”
转到结束
结束:
FunctionEnd
15,MB_RTLREADING - RTL读取顺序
设置的MessageBox阅读顺序为自右向左,该模式下易导致界面显示错乱,故不推荐使用
功能.onInit
;这里输入要测试的代码
MessageBox MB_YESNO | MB_RTLREADING“MB_RTLREADING - RTL读取顺序”
/ SD IDYES IDYES label_yes IDNO label_no
label_yes:
MessageBox MB_OK“你点击了是”
转到结束
label_no:
MessageBox MB_OK“你点击了否”
转到结束
结束:
FunctionEnd
16,MB_DEFBUTTON1 - 按钮1是默认值
17,MB_DEFBUTTON2 - 按钮2是默认值
18,MB_DEFBUTTON3 - 按钮3是默认值
19,MB_DEFBUTTON4 - 按钮4是默认值
注:本文写作过程中参考了NSIS官方使用手册NSIS.chm
结束
NSIS脚本学习:弹出窗口的MessageBox的使用方法详解