RegRead

从注册表读取值.

新语法 [v1.1.21+]

RegRead, OutputVar, KeyName , ValueName

参数

OutputVar

用来存储获取值的变量名. 如果值无法获取, 则变量被置空且 ErrorLevel 被设为 1.

KeyName

注册表键的全名.

必须以 HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT 或 HKEY_CURRENT_CONFIG(或这些的缩写, 如 HKLM) 开始. 要访问远程注册表, 请在前面加上计算机名和冒号(或在 [v1.1.21+], 可用斜杠 / 或 \), 就像在本例中一样: \\workstation01:HKEY_LOCAL_MACHINE, 或 [v1.1.21+] \\workstation01\HKEY_LOCAL_MACHINE

ValueName

要获取值的名称. 如果省略, 则获取 KeyName 的默认值, 这是在注册表中值名显示为 "(默认)" 的值. 如果没有默认值(即注册表中显示 "数值未设置"), 则将 OutputVar 置空且 ErrorLevel 设置为 1.

示例

; 例子: 返回 Program Files 目录的路径.

; 此行确保在 64 位系统上运行非 64 位脚本时也能正常返回 64 位的 Program Files 目录路径.
SetRegView 64  ; 需要 [v1.1.08+]

RegRead, OutputVar, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion, ProgramFilesDir
MsgBox, Program files are in: %OutputVar%

; 另一种返回 Program Files 目录路径的方法:
EnvGet OutputVar, % A_Is64bitOS ? "ProgramW6432" : "ProgramFiles"
MsgBox, Program files are in: %OutputVar%

传统语法

不推荐: 不推荐在新脚本中使用此语法. 而是使用新语法.

RegRead, OutputVar, RootKey, SubKey , ValueName

参数

OutputVar

用来存储获取值的变量名. 如果无法获取, 则变量被置空且 ErrorLevel 被设置为 1.

RootKey

必须为 HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT 或 HKEY_CURRENT_CONFIG 的其中一个(或者它们的缩写, 例如 HKLM). 要访问远程注册表, 请在前面加上计算机名和冒号(或在 [v1.1.21+] 可用斜杠 / 或 \), 就像在本例中一样: \\workstation01:HKEY_LOCAL_MACHINE, 或 [v1.1.21+] \\workstation01\HKEY_LOCAL_MACHINE

SubKey

子键名(例如 Software\SomeApplication).

ValueName

要获取的值名. 如果省略, 则获取 Subkey 的默认值, 这是在注册表中值名显示为 "(默认)" 的值. 如果没有默认值(即注册表中显示 "数值未设置"), 则 OutputVar 置空且 ErrorLevel 设置为 1.

示例

; 例子: 返回 Program Files 目录的路径.

; 此行确保在 64 位系统上运行非 64 位脚本时也能正常返回 64 位的 Program Files 目录路径.

SetRegView 64  ; 需要 [v1.1.08+]

RegRead, OutputVar, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion, ProgramFilesDir
MsgBox, Program files are in: %OutputVar%

; 另一种返回 Program Files 目录路径的方法:
EnvGet OutputVar, % A_Is64bitOS ? "ProgramW6432" : "ProgramFiles"
MsgBox, Program files are in: %OutputVar%

错误处理

[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.

如果遇到问题(例如不存在的键或值名), 则 ErrorLevel 被设置为 1, 否则为 0.

A_LastError 被设置为操作系统 GetLastError() 函数返回的结果.

备注

目前只支持下列这些值类型: REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD 以及 REG_BINARY.

REG_DWORD 值总是被转换为正十进制数. 如果该数字是负数, 则使用 OutputVar := OutputVar << 32 >> 32 或类似的方法将其转换为有符号的 32 位整数.

读取 REG_BINARY 键时, 获取的结果为十六进制字符的字符串. 例如, REG_BINARY 类型的值 01, a9, ff, 77 的读取结果为字符串 01A9FF77.

读取 REG_MULTI_SZ 键时, 值的每个部分会以换行符结束(`n). 如果值为空, 则 OutputVar 会被置空. 请参阅 FileSelectFile 中的示例了解如何从 OutputVar 中逐个提取单独的部分.

[v1.1.10.01+]: 大于 64K 的 REG_BINARY 值可以被读取.

要获取和操作多个注册表键或值, 请考虑使用注册表循环.

关于如何访问远程计算机注册表的详情, 请参阅注册表循环中的备注.

要在 32 位脚本中读写注册表 64 位部分的条目或进行相反的操作, 请使用 SetRegView.

相关

RegDelete, RegWrite, 注册表循环, SetRegView, IniRead

示例

#1: 下面的例子获取注册表值的类型(例如 REG_SZ 或 REG_DWORD).

MsgBox % RegKeyType("HKCU", "Environment", "TEMP")
return

RegKeyType(RootKey, SubKey, ValueName)  ; 此函数返回指定值的类型.
{
    Loop, %RootKey%, %SubKey%
        if (A_LoopRegName = ValueName)
            return A_LoopRegType
    return "Error"
}