查看源代码 win32reg (stdlib v6.2)
提供对 Windows 注册表的访问。
此模块提供对 Windows 注册表的读写访问。它本质上是一个围绕 Win32 API 调用(用于访问注册表)的端口驱动程序。
注册表是一个分层数据库,用于存储 Windows 中的各种系统和软件信息。它包含安装数据,并由安装程序和系统程序更新。Erlang 安装程序通过添加 Erlang 需要的数据来更新注册表。
注册表包含键和值。键就像文件系统中的目录,它们形成一个层次结构。值就像文件,它们有一个名称和一个值,以及一个类型。
键的路径从左到右,子键在右侧,键之间使用反斜杠分隔。(请记住,反斜杠在 Erlang 字符串中必须加倍。)大小写保留,但不重要。
例如,"\\hkey_local_machine\\software\\Ericsson\\Erlang\\5.0"
是最新 Erlang 版本的安装数据的键。
Windows 注册表中有六个入口点,即顶级键。它们可以在此模块中缩写如下:
Abbreviation Registry key
============ ============
hkcr HKEY_CLASSES_ROOT
current_user HKEY_CURRENT_USER
hkcu HKEY_CURRENT_USER
local_machine HKEY_LOCAL_MACHINE
hklm HKEY_LOCAL_MACHINE
users HKEY_USERS
hku HKEY_USERS
current_config HKEY_CURRENT_CONFIG
hkcc HKEY_CURRENT_CONFIG
dyn_data HKEY_DYN_DATA
hkdd HKEY_DYN_DATA
上面的键可以写成 "\\hklm\\software\\ericsson\\erlang\\5.0"
。
此模块使用当前键。它的工作方式很像当前目录。从当前键,可以获取值、列出子键等等。
在一个键下,可以存储任意数量的命名值。它们具有名称、类型和数据。
win32reg
支持存储以下类型:
REG_DWORD
,它是一个整数REG_SZ
,它是一个字符串REG_BINARY
,它是一个二进制数据
可以读取其他类型,并将其作为二进制数据返回。
还有一个“默认”值,其名称为空字符串。它是使用原子 default
而不是名称来读取和写入的。
一些注册表值存储为带有对环境变量引用的字符串,例如 %SystemRoot%Windows
。SystemRoot
是一个环境变量,应替换为其值。提供了函数 expand/1
,以便可以将以 %
包围的环境变量扩展为其值。
有关 Windows 注册表的更多信息,请参阅 Win32 程序员参考。
另请参阅
erl_posix_msg
, Windows 95 注册表(O'Reilly 出版的书), Win32 程序员参考(来自 Microsoft)
摘要
函数
将当前键更改为另一个键。工作方式类似于 cd
。该键可以指定为相对路径或绝对路径,以 \
开头。
创建一个键,或者只是更改为它(如果它已经存在)。工作方式类似于 mkdir
和 cd
的组合。调用 Win32 API 函数 RegCreateKeyEx()
。
关闭注册表。之后,RegHandle
将无法使用。
返回当前键的路径。这相当于 pwd
。
删除当前键(如果有效)。调用 Win32 API 函数 RegDeleteKey()
。请注意,此调用不会更改当前键(与 change_key_create/2
不同)。这意味着调用后,当前键无效。
删除当前键上的命名值。原子 default
用于默认值。
展开包含百分号之间环境变量的字符串。两个 %
之间的任何内容都被视为环境变量,并替换为该值。两个连续的 %
将被替换为一个 %
。
通过调用 file:format_error/1
将 POSIX 错误代码转换为字符串。
打开注册表进行读取或写入。当前键是根 (HKEY_CLASSES_ROOT
)。模式列表中的标志 read
可以省略。
将命名(或默认)值设置为 value
。调用 Win32 API 函数 RegSetValueEx()
。该值可以是三种类型,并使用相应的注册表类型。支持的类型如下:
返回当前键的子键列表。调用 Win32 API 函数 EnumRegKeysEx()
。
检索当前键上的命名值(或默认值)。类型为 REG_SZ
的注册表值将作为字符串返回。类型为 REG_DWORD
的值将作为整数返回。所有其他类型都将作为二进制数据返回。
检索当前键上所有值的列表。这些值的类型与注册表类型相对应,请参阅 value/2
。调用 Win32 API 函数 EnumRegValuesEx()
。
类型
函数
-spec change_key(RegHandle, Key) -> ReturnValue when RegHandle :: reg_handle(), Key :: string(), ReturnValue :: ok | {error, ErrorId :: atom()}.
将当前键更改为另一个键。工作方式类似于 cd
。该键可以指定为相对路径或绝对路径,以 \
开头。
-spec change_key_create(RegHandle, Key) -> ReturnValue when RegHandle :: reg_handle(), Key :: string(), ReturnValue :: ok | {error, ErrorId :: atom()}.
创建一个键,或者只是更改为它(如果它已经存在)。工作方式类似于 mkdir
和 cd
的组合。调用 Win32 API 函数 RegCreateKeyEx()
。
注册表必须以写入模式打开。
-spec close(RegHandle) -> ok when RegHandle :: reg_handle().
关闭注册表。之后,RegHandle
将无法使用。
-spec current_key(RegHandle) -> ReturnValue when RegHandle :: reg_handle(), ReturnValue :: {ok, string()}.
返回当前键的路径。这相当于 pwd
。
请注意,当前键存储在驱动程序中,并且可能无效(例如,如果该键已被删除)。
-spec delete_key(RegHandle) -> ReturnValue when RegHandle :: reg_handle(), ReturnValue :: ok | {error, ErrorId :: atom()}.
删除当前键(如果有效)。调用 Win32 API 函数 RegDeleteKey()
。请注意,此调用不会更改当前键(与 change_key_create/2
不同)。这意味着调用后,当前键无效。
-spec delete_value(RegHandle, Name) -> ReturnValue when RegHandle :: reg_handle(), Name :: name(), ReturnValue :: ok | {error, ErrorId :: atom()}.
删除当前键上的命名值。原子 default
用于默认值。
注册表必须以写入模式打开。
展开包含百分号之间环境变量的字符串。两个 %
之间的任何内容都被视为环境变量,并替换为该值。两个连续的 %
将被替换为一个 %
。
不在环境中的变量名会导致错误。
通过调用 file:format_error/1
将 POSIX 错误代码转换为字符串。
-spec open(OpenModeList) -> ReturnValue when OpenModeList :: [OpenMode], OpenMode :: read | write, ReturnValue :: {ok, RegHandle} | {error, ErrorId :: enotsup}, RegHandle :: reg_handle().
打开注册表进行读取或写入。当前键是根 (HKEY_CLASSES_ROOT
)。模式列表中的标志 read
可以省略。
在 open
后,使用带有绝对路径的 change_key/2
。
-spec set_value(RegHandle, Name, Value) -> ReturnValue when RegHandle :: reg_handle(), Name :: name(), Value :: value(), ReturnValue :: ok | {error, ErrorId :: atom()}.
将命名(或默认)值设置为 value
。调用 Win32 API 函数 RegSetValueEx()
。该值可以是三种类型,并使用相应的注册表类型。支持的类型如下:
REG_DWORD
用于整数REG_SZ
用于字符串REG_BINARY
用于二进制数据
其他类型无法添加或更改。
注册表必须以写入模式打开。
-spec sub_keys(RegHandle) -> ReturnValue when RegHandle :: reg_handle(), ReturnValue :: {ok, [SubKey]} | {error, ErrorId :: atom()}, SubKey :: string().
返回当前键的子键列表。调用 Win32 API 函数 EnumRegKeysEx()
。
避免在根键上调用此方法,因为它可能很慢。
-spec value(RegHandle, Name) -> ReturnValue when RegHandle :: reg_handle(), Name :: name(), ReturnValue :: {ok, Value :: value()} | {error, ErrorId :: atom()}.
检索当前键上的命名值(或默认值)。类型为 REG_SZ
的注册表值将作为字符串返回。类型为 REG_DWORD
的值将作为整数返回。所有其他类型都将作为二进制数据返回。
-spec values(RegHandle) -> ReturnValue when RegHandle :: reg_handle(), ReturnValue :: {ok, [ValuePair]} | {error, ErrorId :: atom()}, ValuePair :: {Name :: name(), Value :: value()}.
检索当前键上所有值的列表。这些值的类型与注册表类型相对应,请参阅 value/2
。调用 Win32 API 函数 EnumRegValuesEx()
。