Registry control with Visual C++

Registry的控制,跟檔案的控制其實很相似。
開始read/write前,你需要先create/open Registry以取得Registry Key Handler;結束前,則必須要將這個Handler close掉。

1. RegCreateKeyEx/RegOpenKeyEx
以上列這兩種method來打開Registry。不同點在於,RegCreateKeyEx在指定的路徑找不到Registry會幫你Create,找到則Open;RegOpenKeyEx則只能夠幫你Open。
你需要指定Root (HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS),Subkey(路徑),Access Right,和丟一個Registry Key Handler的pointer給他,以便取得此Handler。
HKEY hkey;
DWORD dwDisp = 0;
HRESULT hr = RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Test"), 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &dwDisp);
if (ERROR_SUCCESS == hr)
{
...
}
而dwOptions則可以在Create一個Registry時,控制他的LifeCycle。REG_OPTION_NON_VOLATILE - default value. Registry在system shutdown後仍存在。
REG_OPTION_VOLATILE - Registry在system shutdown後消失。

2. RegQueryValueEx()
以此取得資料。將剛剛取得的HKEY都進去,指定你想要知道的Value Name和一個用來放資料的Buffer和他的長度即可。
BYTE buf[256];
memset(buf, 0, 256);
DWORD dwtype, Size = 256;
HRESULT hr = RegQueryValueEx(hkey, _T("MyValueName"), NULL, &dwtype, (LPBYTE)buf, &Size);
if (ERROR_SUCCESS == hr)
{
...
}

3. RegSetValueEx()
以此設定資料。使用方法同上,只是這次丟進去的指標指向你所要設定的資料。
CString strValue = _T("Test");
RegSetValueEx(hkey, _T("MyValueName"), 0, REG_SZ,
(LPBYTE)(LPCTSTR)strValue , strValue .GetLength());

4. RegCloseKey()
以此關閉Registry Handler。將HKEY丟進去即可。
RegCloseKey(hkey);

張貼留言

注意:只有此網誌的成員可以留言。