E.5 常用函数库
E.5.1 介绍
包含文件:
!include "UsefulLib.nsh"
声明安装函数 "GetParent" 和卸载函数 "GetParent" (注意:必须要在使用这个函数之前声明):
${GetFileExt} ${un.GetParent}
调用函数:
Section Install ${GetParent} "C:\My Downloads\Index.html" $R0 ; $R0="C:\My Downloads" SectionEnd
Section un.Install ${un.GetParent} "C:\My Downloads\Index.html" $R0 ; $R0="C:\My Downloads" SectionEnd
某些简短的函数可以不用声明就直接使用,并可以在任意 Section、Function 中使用,卸载区段中也不需要添加 un. 前缀。比如:
Section ${IsWinNT} $0 ;可以直接使用的函数 ${If} $0 == 1 DetailPrint "你的系统是 NT、2000 平台" ${Else} DetailPrint "你的系统是 9X 平台" ${EndIf} SectionEnd
当函数说明里注明“使用了 System 插件”而你又在 Function .onInit 里使用了这个函数 那么你应该增加 ReserveFile "${NSISDIR}\Plugins\System.dll" 指令
E.5.2 字串处理函数
E.5.2.1 Find (需要声明)
- 在一个字串中查找另一个字串并返回该字串的位置
语法:
${Find} 输出变量 字串 要查找的字串
注意:
-区分大小写
-使用了 System 插件
例子:
${Find} $0 "C:\Windows\explorer.exe" "explorer" ; 结果:$0 = 11
E.5.2.2 FindI (需要声明)
- 在一个字串中查找另一个字串并返回该字串的位置
语法:
${FindI} 输出变量 字串 要查找的字串
注意:
-不区分大小写
-使用了 System 插件
例子:
${FindI} $0 "C:\Windows\explorer.exe" "explorer" ; 结果:$0 = 11
E.5.2.3 FindLast (需要声明)
- 在一个字串中查找另一个字串并返回该字串的位置,从右至左查找。
语法:
${FindLast} 输出变量 字串 要查找的字串
注意:
-区分大小写
-使用了 System 插件
例子:
${FindLast} $0 "C:\Windows\explorer.exe" "w" ; 结果:$0 = 8
E.5.2.4 FindLastI (需要声明)
- 在一个字串中查找另一个字串并返回该字串的位置,从右至左查找。
语法:
${FindLastI} 输出变量 字串 要查找的字串
注意:
-不区分大小写
-使用了 System 插件
示例:
${FindLastI} $0 "C:\Windows\explorer.exe" "w" ; 结果:$0 = 8
E.5.2.5 StrStr
- 在一个字串中查找并返回第一个匹配的子字串
语法:
${StrStr} 输出变量 字串 要查找的子字串
注意:
-区分大小写
-使用了 System 插件
示例:
${StrStr} $0 "C:\Windows\explorer.exe" "Windows" ; 结果:$0 = Windows\explorer.exe
E.5.2.6 StrStrI
- 在一个字串中查找并返回第一个匹配的子字串
语法:
${StrStrI} 输出变量 字串 要查找的子字串
注意:
-区分大小写
-使用了 System 插件
示例:
${StrStrI} $0 "C:\Windows\explorer.exe" "Windows" ; 结果:$0 = Windows\explorer.exe
E.5.2.7 StrRStrI
- 在一个字串中查找第一个匹配的子字串,从右到左查找。
语法:
${StrRStrI} 输出变量 字串 要查找的子字串
注意:
-不区分大小写
-使用了 System 插件
示例:
${StrRStrI} $0 "C:\Windows\explorer.exe" "w" ; 结果:$0 = ws\explorer.exe
E.5.2.8 TrimLine (需要声明)
- 去除字串尾部的回车换行符、去除字串头部和尾部的空格
语法:
${TrimLine} 输入(出)变量
注意:
示例:
StrCpy $0 "aaa$\r$\n" ${TrimLine} $0 ; 结果:$0 = aaa
E.5.2.9 TrimLineEx (需要声明)
- 去除字串尾部的回车换行符、字串前后的空格、制表符
语法:
${TrimLineEx} 输入(出)变量
注意:
示例:
StrCpy $0 "aaa$\r$\n" ${TrimLineEx} $0 ; 结果:$0 = aaa
E.5.2.10 Replace (需要声明)
- 字符串替换
语法:
${Replace} 输入(输出)变量 要查找的字串 要替换的字串
注意:
示例:
StrCpy $0 12345ff89 ${Replace} $0 ff firefox ; 结果:$0 = 12345firefox89
E.5.2.11 ReplaceEx (需要声明)
- 字符串替换
语法:
${ReplaceEx} 输入(输出)变量 要查找的字串 要替换的字串 字串起始偏移 替换多少次后返回 是否区分大小写
注意:
"是否区分大小写" 参数接受 ${TRUE} 或 ${FALSE}
示例:
StrCpy $0 12345ff89 ${ReplaceEx} $0 ff firefox 0 1 ${FALSE} ; 结果:$0 = 12345firefox89
E.5.2.12 VerCmp (需要声明)
- 比较带点的版本号,比如 1.90.2。
语法:
${VerCmp} 输出变量 版本1 版本2
注意:
如果相等返回 0,如果 '版本1' 大于 '版本2' 则返回 1 ,否则返回 -1
示例:
${VerCmp} $0 0.8.5 0.8.3 ; 结果:$0 = 1
E.5.2.13 StrCase (需要声明)
- 转换字符大小写
语法:
${StrCase} 输出变量 字串 大小写类型
注意:
大小写类型:
- "" = 无转换
- L = 全部小写 (this is just an example. a very simple one.)
- U = 全部大写 (THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE.)
- T = 单词首字母大写 (This Is Just An Example. A Very Simple One.)
- S = 句子首字母大写 (This is just an example. A very simple one.)
- <> = 切换大小写 (This is just an example. A very simple one.)
使用了 System 插件
示例:
${StrCase} $0 "This Is Just An Example" U ; 结果:$0 = THIS IS JUST AN EXAMPLE
E.5.2.14 StrToHex (需要声明)
- 把字符串转换为十六进制 ASCII 编码
语法:
${StrToHex} 输出变量 输入字串
注意:
使用了 System 插件
示例:
${StrToHex} $0 "a 20 你好" ; 结果:$0 = 6120323020C4E3BAC3
E.5.2.15 TrimRN
- 去除字串尾部的回车换行符
语法:
${TrimRN} 输出(输出)变量
注意:
示例:
StrCpy $0 "aaa$\r$\n" ; 结果:$0 = aaa
E.5.2.16 ConvertANSIToUTF8 (需要声明)
- 把 ANSI 字符转换为 UTF-8 字符
语法:
${ConvertANSIToUTF8} 输出 代码页 要转换的字符
注意:
要使用默认的代码页请使用 ${CP_ACP},或者指定一个代码页,比如简体中文 - 936、繁体中文 - 950
使用了 System 插件
示例:
${ConvertANSIToUTF8} $0 936 "中国" ; 结果:$0 的内码为 E4B8ADE59BBD
E.5.2.17 ConvertUTF8ToANSI (需要声明)
- 把 UTF-8 字符转换为 ANSI 字符
语法:
${ConvertUTF8ToANSI} 输出 代码页 要转换的字符
注意:
要使用默认的代码页请使用 ${CP_ACP},或者指定一个代码页,比如简体中文 - 936、繁体中文 - 950
使用了 System 插件
E.5.3 文件、磁盘处理函数
E.5.3.1 GetParent (需要声明)
- 获取上级目录
语法:
${GetParent} 输出变量 字串
注意:
示例:
${GetParent} $0 "C:\Windows\explorer.exe" ; 结果:$0 = C:\Windows
E.5.3.2 GetChild (需要声明)
- 获取同级名称
语法:
${GetChild} 输出变量 字串
注意:
示例:
${GetChild} $0 "C:\Windows\explorer.exe" ; 结果:$0 = explorer.exe
E.5.3.3 GetFileExt (需要声明)
- 获取文件的扩展名
语法:
${GetFileExt} 输出变量 字串
注意:
示例:
${GetFileExt} $0 "explorer.exe" ; 结果:$0 = exe
E.5.3.4 DumpLog (需要声明)
- 把安装信息窗口的信息提取到文件
语法:
${DumpLog} 要写入的文件
注意:
使用了 System 插件
示例:
${DumpLog} "C:\log.txt"
E.5.3.5 AppendFile (需要声明)
- 把一个文件的内容附加到另一个文件
语法:
${AppendFile} 源文件 目标文件
注意:
示例:
${AppendFile} "C:\log.txt" "D:\log.txt"
E.5.3.6 DelFileByLog (需要声明)
- 根据 LogSet 指令的记录删除安装过程中释放的文件
语法:
${DelFileByLog} 记录文件
注意:
示例:
${DelFileByLog} "$INSDIR\install.log"
E.5.3.7 RMDir (需要声明)
- 如果指定的文件夹为空则删除,并删除所有空子文件夹 (递归)。
语法:
${RMDir} 文件夹
注意:
示例:
${RMDir} $INSTDIR
E.5.3.8 ForEachFile (需要声明)
- 对指定文件夹下的文件执行指定的回调函数
语法:
${ForEachFile} 文件夹 回调函数地址
注意:
在回调函数中,堆栈顶保存了要处理的文件全路径
示例:
GetFunctionAddress $0 CallBackProc
${ForEachFile} $SYSDIR $0 ; 回调函数
Function CallBackProc
Exch $R0
DetailPrint $R0 ;或者其它处理指令
Pop $R0 ;恢复 $R0
FunctionEnd
E.5.3.9 ForEachFileEx (需要声明)
- 对指定文件夹下的文件执行指定的回调函数,和 ForEachFile 一样,但是函数是递归的。
语法:
${ForEachFileEx} 文件夹 回调函数地址
注意:
在回调函数中,堆栈顶保存了要处理的文件全路径
示例:
GetFunctionAddress $0 CallBackProc
${ForEachFileEx} $SYSDIR $0 ; 回调函数
Function CallBackProc
Exch $R0
DetailPrint $R0 ;或者其它处理指令
Pop $R0 ;恢复 $R0
FunctionEnd
E.5.3.10 SearchFile (需要声明)
- 查找文件夹下的文件 (递归)
语法:
${SearchFile} 查找结果 文件夹 文件
注意:
查找结果返回找到的第一个匹配文件全路径名,找不到时返回空字串。不支持通配符
示例:
${SearchFile} $0 "$WINDIR" "shell32.dll"
E.5.3.11 IsWritable
- 检测文件是否可写。1 为可写,0 为不可写,-1 为文件不存在。
语法:
${IsWritable} 输出变量 测试文件
注意:
示例:
${IsWritable} $0 "$WINDIR\explorer.exe"
E.5.3.12 GetVolume
- 获取驱动器的卷标
语法:
${GetVolume} 输出变量 驱动器名
注意:
使用了 System 插件
示例:
${GetVolume} $0 "C:\"
E.5.3.13 TrimDir
- 如果目录的最后有 \ 则去掉
语法:
${TrimDir} 输入(输出)变量
注意:
示例:
${TrimDir} $0 "C:\" ; 结果:$0 = C:
E.5.3.14 FileTimeCmp
- 比较两个文件的时间戳 (修改时间)
语法:
${FileTimeCmp} 返回值 文件1 文件2
注意:
如果‘文件1’修改时间比‘文件2’早,返回 -1,相等则返回 0,迟则返回 1
使用了 System 插件
E.5.3.15 GetFileSize
- 获取文件大小
语法:
${GetFileSize} 输出变量 文件
注意:
如果函数失败,则返回 ${INVALID_FILE_SIZE}
使用了 System 插件
示例:
${GetFileSize} $0 "$WINDIR\explorer.exe"
E.5.3.16 CompactPathEx
- 根据指定的数字截去中间的字符
语法:
${CompactPathEx} 输出变量 输入 输出的最大字符长度
注意:
使用了 System 插件
示例:
${CompactPathEx} $0 "C:\Documents and Settings\用户名\Local Settings\Application Data\Microsoft\Internet Explorer" 70 ; 结果:$0 = C:\Documents and Settings\用户名\Local Settings\...\Internet Explorer
E.5.3.17 RenameExtension
- 重命名文件扩展名
语法:
${RenameExtension} 输入(输出)变量 .扩展名
注意:
使用了 System 插件
示例:
StrCpy $0 "C:\TEST\sample.txt" ${RenameExtension} $0 ".bin" ; 结果:$0 = C:\TEST\sample.bin
E.5.3.18 RelativePathTo
- 把绝对路径转换为相对路径
语法:
${RelativePathTo} 输出变量 参考路径 要转换的路径
注意:
使用了 System 插件
示例:
${RelativePathTo} $0 "C:\a\b\path" "C:\a\x\y\file" ; 结果:$0 = ..\..\x\y\file
E.5.3.19 PathCanonicalize
- 把相对路径转换为绝对路径
语法:
${PathCanonicalize} 输出变量 路径
注意:
使用了 System 插件
示例:
${PathCanonicalize} $0 "A:\name_1\.\name_2\..\name_3" ; 结果:$0 = A:\name_1\name_3
E.5.3.20 RemoveArgs
- 移除路径里的参数
语法:
${RemoveArgs} 输出(输出)变量
注意:
使用了 System 插件
示例:
StrCpy $0 "C:\a\b\FileA Arg1 Arg2" ${RemoveArgs} $0 ; 结果:$0 = C:\a\b\FileA
E.5.3.21 CheckFileEncoding
- 根据 BOM (字节顺序标志) 获取文件所使用的编码
语法:
${CheckFileEncoding} 输出变量 文件
注意:
返回值为下列值之一
${BOM_ANSI}
${BOM_EBCDIC}
${BOM_UCS4_LE}
${BOM_UCS4_BE}
${BOM_UTF16_BE}
${BOM_UTF16_LE}
${BOM_UNICODE_BE}
${BOM_UNICODE_LE} 或者 ${BOM_UNICODE}
${BOM_UTF8}
E.5.4 注册表处理函数
注册表函数的根键的有效值为下列之一
${HKCU}
${HKLM}
${HKU}
${HKCR}
${HKPD}
${HKCC}
${HKDD}
E.5.4.1 CopyReg (需要声明)
- 复制一个键下的值数据及子键数据到另一个键下 (递归)
语法:
${CopyReg} 源根键 源子键 目标根键 目标子键
注意:
使用了 System 插件
示例:
${CopyReg} ${HKCU} "Software\Microsoft\Internet Explorer" ${HKCU} "Software\test"
E.5.4.2 ReadRegBin (需要声明)
- 读取一个二进制注册表键值
语法:
${ReadRegBin} 输出变量 根键 子键 项
注意:
使用了 System 插件
示例:
${ReadRegBin} $0 ${HKLM} `SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop` `Default Taskbar`
E.5.4.3 ReadRegMultiStr (需要声明)
- 读取一个 REG_MULTI_SZ 类型的注册表键值
语法:
${ReadRegMultiStr} 根键 子键 项 回调函数地址
注意:
在回调函数中堆栈顶保存了该健的每一个值数据
错误级别:
1 不能打开注册表健
2 无法查询注册表健
3 是 REG_MULTI_SZ 类型
4 值为空
使用了 System 插件
示例:
Section
GetFunctionAddress $0 CallBackProc
StrCpy $1 0
ClearErrors
${ReadRegMultiStr} ${HKLM} `SYSTEM\CurrentControlSet\Control\Session Manager`\
`ObjectDirectories` $0
${If} ${Errors}
GetErrorLevel $0
DetailPrint $0
${Else}
DetailPrint "回调函数调用了 $1 次"
${EndIf}
SectionEnd
Function CallBackProc
Exch $R0
DetailPrint $R0 ;在回调函数里你可以做其它的处理
IntOp $1 $1 + 1
Pop $R0
FunctionEnd
E.5.4.4 WriteRegBin (需要声明)
- 写入一个二进制注册表键值
语法:
${WriteRegBin} 根键 子键 项 二进制数据(十六进制)
注意:
使用了 System 插件
示例:
${WriteRegBin} ${HKCU} `SOFTWARE\test` ffad61bc00
E.5.4.5 WriteRegStrW (需要声明)
- 根据指定的代码页写入一个 Unicode 注册表数据
语法:
${WriteRegStrW} 代码页 根键 子键 项 数据
注意:
Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.
在这里 936 = 简体中文代码页。(950 = 繁体中文代码页)
使用了 System 插件
示例:
${WriteRegStrW} 936 ${HKCU} "Software\测试" "简体中文" "中国"
E.5.4.6 SHCopyKey
- 复制一个键下的值数据及子键数据到另一个键下 (递归)
语法:
${SHCopyKey} 源根键 源子键 目标根键 目标子键
注意:
使用 Shlwapi.dll 的 SHCopyKey 函数。如果函数失败,则会放置一个错误标记
使用了 System 插件
示例:
${SHCopyKey} ${HKCU} "Software\Microsoft\Internet Explorer" ${HKCU} "Software\test"
E.5.4.7 SHRegGetPath
- 从注册表获取一个路径,并把环境变量展开
语法:
${SHRegGetPath} 输出 根键 子键 值
注意:
使用 Shlwapi.dll 的 SHRegGetPath 函数
使用了 System 插件
示例:
${SHRegGetPath} $0 ${HKCU} "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" "Templates"
E.5.4.8 GetRegKeyCount
- 获取注册表某个键下的子键个数
语法:
${GetRegKeyCount} 输出 根键 子键
注意:
使用了 System 插件
示例:
${GetRegKeyCount} $0 ${HKCU} "Software\Microsoft\Internet Explorer"
E.5.4.9 GetRegValueCount
- 获取注册表某个键下的值个数
语法:
${GetRegValueCount} 输出 根键 子键
注意:
使用了 System 插件
示例:
${GetRegValueCount} $0 ${HKCU} "Software\Microsoft\Internet Explorer\Main"
E.5.5 杂项函数
E.5.5.1 CloseApp
- 根据类名关闭一个程序
语法:
${CloseApp} 类名
注意:
示例:
${CloseApp} "Winamp v1.x"
E.5.5.2 IsWinNT
- Windows NT 平台返回 1 ,否则返回 0
语法:
${IsWinNT} 输出变量
注意:
示例:
${IsWinNT} $0
E.5.5.3 GetComputerName
- 获取计算机名称
语法:
${GetComputerName} 输出变量
注意:
示例:
${GetComputerName} $0
E.5.5.4 GetInstallerName
- 获取安装程序完整名称
语法:
${GetInstallerName} 输出变量
注意:
使用了 System 插件
示例:
${GetInstallerName} $0
E.5.5.5 GetLocaleInfo
- 获取系统信息
语法:
${GetLocaleInfo} 输出变量 信息类型
注意:
信息类型参考 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_8rse.asp
使用了 System 插件
E.5.5.6 GetWinName
- 获取 Windows 产品名并返回
语法:
${GetWinName} 输出变量
注意:
示例:
${GetWinName} $0 ;$0 = Microsoft Windows ME 等等
E.5.5.7 GetUserName
- 获取用户名
语法:
${GetUserName} 输出变量
注意:
使用了 System 插件
E.5.5.8 RefreshIcon
- 刷新图标缓存
语法:
${RefreshIcon}
注意:
使用了 System 插件
E.5.5.9 ClearDetail
- 清除详细信息窗口
语法:
${ClearDetail}
注意:
使用了 System 插件
E.5.5.10 GetDllVersion
- 获取 DLL 版本信息,x.x.x.x 格式
语法:
${GetDllVersion} 输出变量 DLL
注意:
E.5.5.11 LoadImage
- 载入一个图标、光标或位图
语法:
${LoadImage} 输出图像句柄变量 控件句柄 图像名称和路径 图像类型
注意:
图像类型为下列之一:
${IMAGE_BITMAP}
${IMAGE_CURSOR}
${IMAGE_ICON}
使用后应该释放它占用的内存,调用下列函数:
位图:DeleteObject
光标:DestroyCursor
图标:DestroyIcon
使用了 System 插件
E.5.5.12 DeleteObject
- 删除载入的位图占用的内存
语法:
${DeleteObject} 位图句柄
注意:
使用了 System 插件
E.5.5.13 DestroyCursor
- 删除载入的光标占用的内存
语法:
${DestroyCursor} 光标句柄
注意:
使用了 System 插件
E.5.5.14 DestroyIcon
- 删除载入的图标占用的内存
语法:
${DestroyIcon} 图标句柄
注意:
使用了 System 插件
E.5.5.15 MessageBox
- 和内建的一样,但可以自己定义标题
语法:
${MessageBox} 返回值 文本 标题 消息框类型
注意:
消息框类型为下列值之一或联合:
${MB_OK}
${MB_OKCANCEL}
${MB_ABORTRETRYIGNORE}
${MB_YESNOCANCEL}
${MB_YESNO}
${MB_RETRYCANCEL}
${MB_ICONHAND}
${MB_ICONQUESTION}
${MB_ICONEXCLAMATION}
${MB_ICONASTERISK}
${MB_ICONINFORMATION}
${MB_ICONSTOP}
返回值为下列之一:
${IDOK}
${IDCANCEL}
${IDABORT}
${IDRETRY}
${IDIGNORE}
${IDYES}
${IDNO}
使用了 System 插件
E.5.5.16 WriteEnvStr (需要声明)
- 写入一个环境变量字串
语法:
${WriteEnvStr} 变量名 变量值 用户类型
注意:
用户类型为下列值之一 (仅在 WinNT 平台有效,Win9X 此参数将被忽略)
${CURRENT_USER} —— 仅对当前用户
${LOCAL_MACHINE} —— 对本地用户
${ALL_USERS} —— 以上两项的联合(${ALL_USERS} == ${CURRENT_USER} | ${LOCAL_MACHINE})
Win9X 设置了环境变量后需要重启才能生效。Win9X 中可能还需要用 GetFullPathName /SHORT 来获取 8.3 格式短路径名。
使用了 System 插件
示例:
${WriteEnvStr} PATH "C:\path" ${ALL_USERS}
E.5.5.17 DeleteEnvStr (需要声明)
- 移除一个环境变量字串
语法:
${DeleteEnvStr} 变量名 变量值 用户类型
注意:
用户类型为下列值之一 (仅在 WinNT 平台有效,Win9X 此参数将被忽略)
${CURRENT_USER} - 仅对当前用户
${LOCAL_MACHINE} - 对本地用户
${ALL_USERS} - 以上两项的联合 (${ALL_USERS} == ${CURRENT_USER} | ${LOCAL_MACHINE})
Win9X 设置了环境变量后需要重启才能生效。Win9X 中可能还需要用 GetFullPathName /SHORT 来获取 8.3 格式短路径名。
使用了 System 插件
示例:
${DeleteEnvStr} PATH "C:\path" ${ALL_USERS}
E.5.5.18 GetWallpaper
- 获取桌面墙纸的路径
语法:
${GetWallpaper} 输出变量
注意:
使用了 System 插件
E.5.5.19 SetWallpaper
- 设置桌面墙纸的路径
语法:
${SetWallpaper} 墙纸
注意:
使用了 System 插件
示例:
SetOutPath $WINDIR File wallpaper.jpg ${SetWallpaper} $WINDIR\wallpaper.jpg
E.5.5.20 GetWallpaperOptions
- 获取桌面墙纸选项
语法:
${GetWallpaperOptions} 输出变量
注意:
使用了 System 插件
E.5.5.21 SetWallpaperOptions
- 设置桌面墙纸选项
语法:
${GetWallpaperOptions} 输出变量
注意:
使用了 System 插件
选项为下列值之一:
${WPSTYLE_CENTER} —— 墙纸居中
${WPSTYLE_TILE} —— 墙纸平铺
${WPSTYLE_STRETCH} —— 墙纸拉伸
${WPSTYLE_MAX} —— 最大化?
E.5.5.22 EnableTheming
- 启用或禁用 Theme —— 仅对 XP 及以上系统有效
语法:
${EnableTheming} 布尔值
注意:
使用了 System 插件
布尔值:
${TRUE} —— 启用 Theme
${FALSE} —— 禁用 Theme
E.5.5.23 GetCurrentThemeName
- 获取当前 Theme 的名称 —— 仅对 XP 及以上系统有效
语法:
${GetCurrentThemeName} 名称输出变量 颜色输出变量 字体大小输出变量
注意:
使用了 System 插件
E.5.6 区段函数
E.5.6.1 StartRadioButtons
- 开始一个互斥区段
语法:
${StartRadioButtons} 互斥区段关联变量 区段组索引
注意:
该函数必须在 .onSelChange 函数里使用
区段关联变量必须在 .onInit 函数里初始化,且该变量在其他地方不应该再使用
如果互斥区段不在区段组内则给区段组索引传递一个负值
示例:
SectionGroup AAA sec01 Section BBB sec02 ;区段组中终默认选中的区段 SectionEnd Section /o "" sec03 SectionEnd Section /o DDD sec04 SectionEnd SectionGroupEnd Section EEE sec05 ;默认选中的区段 SectionEnd Section /o FFF sec06 SectionEnd Section /o GGG sec07 SectionEnd Var RB1 Var RB2 Function .onSelChange ;第一组互斥按钮,区段属于区段组内,关联区段信息到 $RB1 ${StartRadioButtons} $RB1 ${sec01} ;如果互斥按钮在区段组内则传递区段组的索引 ${RadioButton} ${sec02} ${RadioButton} ${sec03} ${RadioButton} ${sec04} ${EndRadioButtons} ;第二组互斥按钮,区段不属于区段组内,关联区段信息到 $RB2 ${StartRadioButtons} $RB2 -1 ;如果互斥按钮不在区段组内则传递一个负值 ${RadioButton} ${sec05} ${RadioButton} ${sec06} ${RadioButton} ${sec07} ${EndRadioButtons} FunctionEnd Function .onInit StrCpy $RB1 ${sec02} ;给第一组互斥按钮的区段变量初始化值 StrCpy $RB2 ${sec05} ;给第二组互斥按钮的区段变量初始化值 FunctionEnd
E.5.6.2 RadioButton
- 添加互斥区段
语法:
${RadioButton} 区段索引
注意:
该函数必须在 .onSelChange 函数里使用
必须配合 StartRadioButtons、EndRadioButtons 一起使用
示例:
见 StartRadioButtons 的例子
E.5.6.3 EndRadioButtons
- 结束一个互斥区段
语法:
${EndRadioButtons}
注意:
该函数必须在 .onSelChange 函数里使用
必须配合 StartRadioButtons、RadioButton 一起使用
示例:
见 StartRadioButtons 的例子
E.5.6.4 EndRadioButtons2
- 结束一个互斥区段。和 EndRadioButtons 一样,不同是允许不选择任何区段。
语法:
${EndRadioButtons2}
注意:
该函数必须在 .onSelChange 函数里使用
必须配合 StartRadioButtons、RadioButton 一起使用
示例:
见 StartRadioButtons 的例子