[英]Reading and Writing registry keys. C++ MFC MBCS.
我想檢測,如果可能的話,讀取CString,一個以“HKEY_LOCAL_MACHINE \\ SOFTWARE \\ blah \\ SetupPath”開頭的注冊表項。
我在RegOpenKeyEx函數上看到了MSDN
LONG WINAPI RegOpenKeyEx(
_In_ HKEY hKey,
_In_opt_ LPCTSTR lpSubKey,
_Reserved_ DWORD ulOptions,
_In_ REGSAM samDesired,
_Out_ PHKEY phkResult
);
所以對於這個看起來我需要設置一些東西。
HKEY hKey = HKEY_LOCAL_MACHINE;
LPCTSTR lpSubKey = "SOFTWARE\blah\SetupPath";
並且看看密鑰是否存在就行了
LONG res = RegOpenKeyEx(hKey, lpSubKey, 0, 0, 0);
if(res == ERROR_SUCCESS)
// The key exists
現在,如果密鑰存在,我想讀取其中的內容,進入CString。 我也看到了RegQueryValueEx
LONG WINAPI RegQueryValueEx(
_In_ HKEY hKey,
_In_opt_ LPCTSTR lpValueName,
_Reserved_ LPDWORD lpReserved,
_Out_opt_ LPDWORD lpType,
_Out_opt_ LPBYTE lpData,
_Inout_opt_ LPDWORD lpcbData
);
在調用此函數之前,我看起來還需要一些設置。
HKEY hKey = HKEY_LOCAL_MACHINE;
lpSubKey = "SOFTWARE\blah\SetupPath";
LPDWORD type = null;
LPDWORD data = null;
現在我可以打電話給它
LONG res2 = RegValueQueryEX(hKey, lpSubKey, 0, type, data,0);
然后我想我可以檢查看到類型然后轉換為字符串?
CString regVal;
if(res2 == ERROR_SUCCESS)
if(type == REG_SZ)
if(data != null)
regVal = new CString((LPSTR)data);
這都是正確的嗎? 我可能缺少什么或需要做什么?
不,這不正確。 你的主要誤解是指針在C ++中是如何工作的。 為指針參數提供NULL是不夠的,您必須提供指向變量的指針,以便RegOpenKeyEx
或RegValueQueryEx
例程可以向該變量返回一個值。 您似乎也誤解了如何分配CString
(不需要new
)。 最后,雖然這不是一個錯誤,但您不需要進行“設置”,只需將值直接傳遞給函數即可。
首先打開鑰匙
HKEY key;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\blah", 0, 0, &key);
然后得到價值
DWORD type, size;
char data[99];
size = sizeof(data);
RegQueryValueEx(key, "SetupPath", 0, &type, (BYTE*)data, &size);
然后將值分配給CString
CString regval(data);
終於關上了鑰匙
RegCloseKey(key);
在該代碼中沒有錯誤檢查,您應該添加它。 另外我假設您可以獲得的任何值都適合99個字節,這可能不是真的。
注意我如何將指針傳遞給key
變量,以便RegOpenKeyEx
可以返回鍵。 然后我在調用RegValueQueryEx
和RegCloseKey
使用該鍵。 type
和size
變量相同。 另請注意,我已經拆分了對RegOpenKeyEx
和RegValueQueryEx
的調用之間的路徑。 我認為這是正確的。
不是100%肯定這是正確的,我沒有測試它,但應該更接近。
這都是正確的嗎? 我可能缺少什么或需要做什么?
除了約翰的回答,我建議做一些修改:
傳遞KEY_READ | KEY_QUERY_VALUE
KEY_READ | KEY_QUERY_VALUE
作為RegOpenKeyEx
訪問權限掩碼,如果您只是要讀取密鑰。
如果緩沖區大小太小, RegQueryValueEx
可能會返回ERROR_MORE_DATA
。 除非您事先知道數據的大小,否則您可能希望在循環中調用它。
使用注冊表在Internet Explorer中啟用javascript執行的簡單方法:
HKEY hKey;
RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3"),
NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE,
NULL, &hKey, NULL);
DWORD byte = 0x0;
RegSetValueEx(hKey, L"1400", NULL, REG_DWORD, (BYTE*)&byte, sizeof(byte));
RegCloseKey(hKey);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.