InstallOptions 2InstallOptions 插件已落伍了。新编写的脚本,推荐使用新的 nsDialogs 插件来替代。 介绍InstallOptions 是一个可以创建自定义安装程序页面的 NSIS 插件,它可以提供一些额外的信息。 InstallOptions 在 NSIS 窗口内所创建的对话框的所有控件及其属性由 INI 文件定义。这些 INI 文件可被脚本修改进而实时地调整对话框。 INI 文件的格式描述就在 Wikipedia article 。 INI 文件结构这个 INI 文件有一个必需的区段。这个区段包含了要创建的控件的数量和常规的窗口属性。INI 文件也包含了一些带变量的 Field x 区段用来定义要创建的控件及其属性。 该必须的区段名为 "Settings"。其可以包含下列值:
每个区段都为 "Field #" 形式,这里 # 是一个从 1 到 NumFields 的连续的数字。每一个区段可以包含下列值:
头文件InstallOptions 头文件提供了宏和函数以便于创建自定义对话框。你可将其插入到你的脚本的开头部分: !include InstallOptions.nsh 创建对话框
释放 INI 文件首先,你需要在 .onInit 函数(或卸载程序的 un.onInit) 里使用宏 INSTALLOPTIONS_EXTRACT 把对话框的 INI 文件释放出来。文件将被释放到一个自动创建的临时文件夹(NSIS 插件文件夹)中。 Function .onInit !insertmacro INSTALLOPTIONS_EXTRACT "ioFile.ini" FunctionEnd 若 INI 文件在另外的文件夹中,使用 INSTALLOPTIONS_EXTRACT_AS。 其第二个参数是临时文件夹中的文件名称,其它宏将要用该文件名称作为输入项。 Function .onInit !insertmacro INSTALLOPTIONS_EXTRACT_AS "..\ioFile.ini" "ioFile.ini" FunctionEnd 显示对话框你可以在 Page 或 UninstPage 命令定义的页面函数里调用 InstallOptions。关于页面系统的更多信息请查看 NSIS 文档。 Page custom CustomPageFunction 要显示对话框,使用宏 INSTALLOPTIONS_DISPLAY: Function CustomPageFunction ;函数名称用 Page 命令定义 !insertmacro INSTALLOPTIONS_DISPLAY "ioFile.ini" FunctionEnd 用户输入要获取用户的输入,可以用宏 INSTALLOPTIONS_READ 来读取某个 Field 的 State 值: !insertmacro INSTALLOPTIONS_READ $VAR "ioFile.ini" "Field #" "Name" 写入 INI 文件宏 INSTALLOPTIONS_WRITE 允许你写入数值到 INI 文件以实时地修改文本或控件设置: !insertmacro INSTALLOPTIONS_WRITE "ioFile.ini" "Field #" "Name" "Value" 值的转义一些 InstallOptions 的值已被转义(类似于 "C" 字串)来使得一些原本无效的特定字符可以在 INI 文件里使用。受影响的值为: 转义符为反斜杠 (\),可用的转义字符如下:
在安装代码中宏 INSTALLOPTIONS_READ_CONVERT 和 INSTALLOPTIONS_WRITE_CONVERT 会自动转换这些字符。在卸载代码中使用宏 INSTALLOPTIONS_READ_UNCONVERT 和 INSTALLOPTIONS_WRITE_UNCONVERT。 要在脚本中使用这些宏,必须包含转换函数: ;对于 INSTALLOPTIONS_READ_CONVERT !insertmacro INSTALLOPTIONS_FUNCTION_READ_CONVERT ;对于 INSTALLOPTIONS_WRITE_CONVERT !insertmacro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT ;对于 INSTALLOPTIONS_READ_UNCONVERT !insertmacro INSTALLOPTIONS_UNFUNCTION_READ_CONVERT ;对于 INSTALLOPTIONS_WRITE_UNCONVERT !insertmacro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT 输入验证要验证用户输入(例如要检测用户是否填写了某个文本框),可使用 Page 命令的离开函数并在验证失败时使用 Abort 命令:
Function ValidateCustom
!insertmacro INSTALLOPTIONS_READ $R0 "test.ini" "Field 1" "State"
StrCmp $R0 "" 0 +3
MessageBox MB_ICONEXCLAMATION|MB_OK "请输入你的大名!"
Abort
FunctionEnd
返回值一个对话框被创建(使用 display 或 show)后,可能的返回值为: 仅当你需要做某些特别的事情时才需要去检测返回值,比如当用户按了上一步按钮时要做些什么事情。 如果你需要返回值,使用宏 INSTALLOPTIONS_DISPLAY_RETURN 和 INSTALLOPTIONS_SHOW_RETURN。返回值将会被添加到堆栈,你可以使用 Pop 命令来提取它。 保留文件如果你使用了固实压缩,很重要的一点是在页面初始化阶段或页面函数里需要释放的文件,应当放在数据区块中的位置就应当放在其它文件的前面。否则,会使某个页面在显示时会有所延误。 要确保这一点,请在所有区段和函数之前添加 InstallOptions 和 INI 文件的 ReserveFile 命令:
ReserveFile "test.ini"
ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
字体和颜色要在 InstallOptions 对话框里使用自定义的字体和颜色,你可使用宏 INSTALLOPTIONS_INITDIALOG 和 INSTALLOPTIONS_SHOW。 INSTALLOPTIONS_INITDIALOG 会在内存里创建页面但不显示出来。在插入了此宏后,你可以设置字体和颜色,然后插入宏 INSTALLOPTIONS_SHOW 来显示对话框。 宏 INSTALLOPTIONS_INITDIALOG 也会将自定义对话框的 HWND 压进堆栈。每一个控件在 INI 文件各对应区段的 HWND 项中都有一个 HWND 值。 使用自定义颜色的例子:
Var HWND
Var DLGITEM
Var FONT
Function FunctionName ;函数名称已用 Page 命令定义
!insertmacro INSTALLOPTIONS_INITDIALOG "ioFile.ini"
Pop $HWND ;对话框的 HWND
!insertmacro INSTALLOPTIONS_READ $DLGITEM "ioFile.ini" "Field 1" "HWND"
;变量 $DLGITEM 包含了第一个区段的 HWND
CreateFont $FONT "Tahoma" 10 700
SendMessage $DLGITEM ${WM_SETFONT} $FONT 0
!insertmacro INSTALLOPTIONS_SHOW
FunctionEnd
致谢名单
初始版本作者: Michael Bishop 许可协议原创版本:版权所有 © 2001 Michael Bishop DLL 版本:版权所有 © 2001-2002 Nullsoft,Inc.,ORTIM DLL 版本 2:版权所有 © 2003-2008 Amir Szekely、Joost Verburg、Dave Laundon 本软件提供原则为“依其现状”,不提供明示或暗示的保证。作者不对任何因使用本软件而 引起的损害事件负责。 如果你同意下列条款,允许任何人、出于任何目的使用本软件,包括商业应用及二次发布: 1、这个软件的来源必须如实说明;你不能声称本软件是你编写。如果你发布的产品使用了 本软件,在你的产品说明中对此进行说明,我们将非常感谢,但这不是必需的。 2、修改版必须有明确标识,并且不得宣称它是原创软件。 3、二次发布版不得移除此通告。(翻译应该是没有问题的吧 +_+) |