檢視原始碼 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()
。