Windows程式設計(操作登錄檔)
阿新 • • 發佈:2021-08-21
Windows程式設計(操作登錄檔)
登錄檔 儲存在二進位制檔案裡面, win32 API 提供了大量的函式操作登錄檔
RegCreateKey
建立指定的登錄檔項
RegCreateKeyW( _ In_ HKEY hKey, //開啟的當前項的控制代碼 實際上就是那幾個分支 _ In_opt_ LPCWSTR lpSubKey,//開啟或者建立的表項的名稱 _ Out_ PHKEY phkResult //用來接收建立或者開啟表項控制代碼 regclosekey ); RegOpenKeyW( _In_ HKEY hKey, //開啟的當前項的控制代碼 實際上就是那幾個分支 _ In_opt_ LPCWSTR lpSubKey, _Out_ PHKEY phkResult );
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
寫登錄檔
RegSetValueW( _In_ HKEY hKey, //開啟的當前項的控制代碼 實際上就是那幾個分支 _In_opt_ LPCWSTR lpSubKey, //開啟或者建立的表項的名稱 _In_ DWORD dwType, //指示被儲存資訊的型別 REG_SZ型別 _ In_reads_bytes_opt_(cbData) LPCWSTR lpData,//要存放到登錄檔裡面的數 據 _ In_ DWORD cbData //要存放的字串資料的大小、 長度 ); RegSetValueExW( _ In_ HKEY hKey, //開啟的當前項的控制代碼 實際上就是那幾個分支 _In_opt_ LPCWSTR lpValueName,//指向一個字串的指標, 包含了將要設定 值的名稱 _ Reserved_ DWORD Reserved,// 保留引數 0 _In_ DWORD dwType,//REG_BINARY _In_reads_bytes_opt_(cbData) CONST BYTE * lpData, _ In_ DWORD cbData );
查詢登錄檔
RegQueryValueW(
_
In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY)
LPWSTR lpData,
_Inout_opt_ PLONG lpcbData
);
該api中有三個出參。內容分別是資料、資料型別、資料
建立與寫入登錄檔
{ { DWORD DWage = 20; HKEY hKey; RegCreateKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Rock\\admin", &hKey); MessageBox(NULL, L"建立登錄檔成功", 0); int ret = ::RegSetValueEx(hKey, L"age", 0, REG_DWORD, (CONST BYTE*) & DWage, 4); if (ret != ERROR_SUCCESS) { MessageBox(NULL,L"寫登錄檔失敗", 0); } MessageBox(NULL,L"寫登錄檔成功", 0); ::RegCloseKey(hKey); } }
查詢登錄檔
{
HKEY hKey;
DWORD dwAge;
//建立登錄檔項 VS2019自帶的偵錯程式管理員許可權執行 自己的生成是以使用者的許可權執行
int ret = ::RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Rock\\admin", &hKey);
if (ret != ERROR_SUCCESS)
{
TRACE("##RegOpenKeyW Failed ,ErrorCode = %d,ret = %d", GetLastError(), ret);
MessageBox(L"開啟登錄檔失敗");
return;
}
//寫登錄檔
DWORD dwType;
DWORD dwValue;
ret = ::RegQueryValueEx(hKey, L"age", 0, &dwType, (LPBYTE)&dwAge, &dwValue);
if (ret != ERROR_SUCCESS)
{
TRACE("##RegQueryValueEx Failed ,ErrorCode = %d,ret = %d", GetLastError(), ret);
MessageBox(L"讀登錄檔失敗");
return;
}
TRACE("###dwType = %d,dwValue = %d ,dwAge = %d", dwType, dwValue, dwAge);
::RegCloseKey(hKey);
}
實際上除此外還有更底層的API能操作登錄檔