目录
当前位置: 首页 > 文档资料 > NSIS 用户手册 >

E.5 常用函数库

优质
小牛编辑
131浏览
2023-12-01

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 的例子