说到“详解”二字,实在是有点不敢当,但是当我为了找到它的正确使用方法在网上到处奔波的时候,最后给我的都是一些破碎的答案,即便是篇幅丰满的,也是将MSDN上面的东西照搬过来,只不过翻译了一下。
所以我决定将RegQueryValueEx“详解"一下。
头文件:windows.h(一般进行MFC开发的都不用考虑这个问题)
例子描述:判断当前操作系统是否是Windows Xp
HKEY hKey;
DWORD dwType = REG_SZ;
DWORD dwSize;
wchar_t data[MAX_PATH];
bool ret;
using ::wcscmp;
ret = RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE//Microsoft//Windows NT//CurrentVersion", &hKey) == ERROR_SUCCESS;
ret = RegQueryValueEx(hKey,L"ProductName",
NULL,
&dwType,
(LPBYTE)data,
&dwSize) == ERROR_SUCCESS;
ret = wcscmp(data, L”Microsoft Windows XP”) == 0;
详解:
该例子的完整注册表信息为:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion
在subKey中不能包含有HKEY_LOCAL_MACHINE。
在上图中,左边的叫做RegKey,右边的叫做RegValue,只一点必须搞清楚。而图中的"名称”叫做Value name。
所以这就是为什么我们在取值时,必须先通过RegOpenKey来找到Key,然后再通过RegQueryValueEx来找到这个Key中包含的Value。
希望我都说清楚了。