查看源代码 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%WindowsSystemRoot 是一个环境变量,应替换为其值。提供了函数 expand/1,以便可以将以 % 包围的环境变量扩展为其值。

有关 Windows 注册表的更多信息,请参阅 Win32 程序员参考。

另请参阅

erl_posix_msg, Windows 95 注册表(O'Reilly 出版的书), Win32 程序员参考(来自 Microsoft)

摘要

函数

将当前键更改为另一个键。工作方式类似于 cd。该键可以指定为相对路径或绝对路径,以 \ 开头。

创建一个键,或者只是更改为它(如果它已经存在)。工作方式类似于 mkdircd 的组合。调用 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()

类型

-type name() :: string() | default.
-opaque reg_handle()

open/1 返回。

-type value() :: string() | integer() | binary().

函数

链接到此函数

change_key(RegHandle, Key)

查看源代码
-spec change_key(RegHandle, Key) -> ReturnValue
                    when
                        RegHandle :: reg_handle(),
                        Key :: string(),
                        ReturnValue :: ok | {error, ErrorId :: atom()}.

将当前键更改为另一个键。工作方式类似于 cd。该键可以指定为相对路径或绝对路径,以 \ 开头。

链接到此函数

change_key_create(RegHandle, Key)

查看源代码
-spec change_key_create(RegHandle, Key) -> ReturnValue
                           when
                               RegHandle :: reg_handle(),
                               Key :: string(),
                               ReturnValue :: ok | {error, ErrorId :: atom()}.

创建一个键,或者只是更改为它(如果它已经存在)。工作方式类似于 mkdircd 的组合。调用 Win32 API 函数 RegCreateKeyEx()

注册表必须以写入模式打开。

-spec close(RegHandle) -> ok when RegHandle :: reg_handle().

关闭注册表。之后,RegHandle 将无法使用。

链接到此函数

current_key(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 不同)。这意味着调用后,当前键无效。

链接到此函数

delete_value(RegHandle, Name)

查看源代码
-spec delete_value(RegHandle, Name) -> ReturnValue
                      when
                          RegHandle :: reg_handle(),
                          Name :: name(),
                          ReturnValue :: ok | {error, ErrorId :: atom()}.

删除当前键上的命名值。原子 default 用于默认值。

注册表必须以写入模式打开。

-spec expand(String) -> ExpandedString when String :: string(), ExpandedString :: string().

展开包含百分号之间环境变量的字符串。两个 % 之间的任何内容都被视为环境变量,并替换为该值。两个连续的 % 将被替换为一个 %

不在环境中的变量名会导致错误。

-spec format_error(ErrorId) -> ErrorString when ErrorId :: atom(), ErrorString :: string().

通过调用 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

链接到此函数

set_value(RegHandle, Name, Value)

查看源代码
-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()

避免在根键上调用此方法,因为它可能很慢。

链接到此函数

value(RegHandle, Name)

查看源代码
-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()