# RegRead

从注册表中读取一个值。

RegRead, OutputVar, RootKey, SubKey [, ValueName]

#### 参数

OutputVar | 存储返回值的变量名。如果获取值失败，它会被设置为空，同时 ErrorLevel/错误级别 被设置为 1 。
RootKey | 只能是 HKEY_LOCAL_MACHINE 、HKEY_USERS 、HKEY_CURRENT_USER 、HKEY_CLASSES_ROOT 、HKEY_CURRENT_CONFIG 其中之一（或者它们的缩写，例如 HKLM ）。要访问远程注册表，在前面加上电脑名和一个冒号，例如：\\workstation01:HKEY_LOCAL_MACHINE
SubKey | 子键的名字（例如 Software\SomeApplication）。
ValueName | 需要读取的项的名称。如果省略，将返回 Subkey 的默认值，也就是在 RegEdit 中显示为“(Default)/默认”的值。如果没有默认值（也就是 RegEdit 中显示“value not set/数值未设置”），OutputVar 被设置为空，同时 ErrorLevel/错误级别 被设置为 1 。

#### ErrorLevel/错误级别

如果遇到问题（例如读取不存在的键或值），ErrorLevel/错误级别 被设置为 1 ，否则为 0 。

#### 注意

目前只支持这些类型的值：REG_SZ/字符串值 ，REG_EXPAND_SZ/可扩充字符串值 ，REG_MULTI_SZ/多字符串值 ，REG_DWORD/DWORD值 ，以及 REG_BINARY/二进制值 。

REG_DWORD/DWORD 类型的值总是被转换为正的十进制数字。

REG_BINARY/二进制 类型的值最多只能读取 64KB ，其它类型的值则没有限制。但是在 Windows 95/98/ME 下，所有类型的值最多只能读取 64KB（ Win9x 的注册表不能存储过大的数据）。

当读取 REG_BINARY/二进制 类型的值的时候，会返回一个16进制的字符串。例如，REG_BINARY/二进制 值为 01,a9,ff,77 ，读取出来的结果为 01A9FF77 。

当读取一个 REG_MULTI_SZ/多字符串 类型的值的时候，值的每一个部分以换行符分隔（`n）。如果值为空，OutputVar 被设置为空。FileSelectFile 中的示例演示了怎么将 OutputVar 分解为各个独立的部分。注意：Windows 95 不支持 REG_MULTI_SZ/多字符串 类型的值。

要返回多个注册表值或对多个注册表值进行操作，推荐使用 registry-loop 。

要获取访问远程注册表的详细资料，可以查看 registry-loop 中的注释。

#### 相关命令

RegDelete, RegWrite, Registry-loop, IniRead

#### 示例

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

    ; 下面的例子返回一个注册表值的类型（例如 REG_SZ/字符串值 或 REG_DWORD/DWORD值）。
    MsgBox % RegKeyType("HKCU", "Environment", "TEMP")
    return

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