NSIS脚本学习:弹出窗口的MessageBox的使用方法详解

转载 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的使用方法详解

你可能感兴趣的:(NSIS脚本学习:弹出窗口的MessageBox的使用方法详解)