我正在尝试从注册表中检索一些值。 这是完整的路径: [HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows \ CurrentVersion \主题] “ThemeChangesMousePointers”= 0x00000001(1)
这是我的代码:
HKEY hKey;
DWORD dwDisp = REG_DWORD;
DWORD dwType;
DWORD dwSize = sizeof(DWORD);
DWORD dwValue = 0;
DWORD dwReturn;
char buffer[255] = {0};
//char* buffer;
//DWORD buffer = 0;
DWORD dwBufSize = sizeof(buffer);
if( RegOpenKey(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes")
,&hKey) == ERROR_SUCCESS)
{
dwType = REG_DWORD;
if( RegQueryValueEx(hKey,_T("ThemeChangesMousePointers"),0, &dwType, (LPBYTE) buffer, &dwBufSize) == ERROR_SUCCESS)
{
printf("Key value is: %d \n", buffer);
printf("GetLastError reports %d \n", GetLastError());
}
else
{
printf("Cannot query for key value \n");
}
}
我已经尝试过调试,看起来我的缓冲区输出变量给了我一个奇怪的输出:
键值为:2554292 错误是0
每次我再次运行代码时,我都会得到不同的值。我怎样才能获得真正的价值而不是另一个呢?
编辑:上面的帖子已被编辑,以提出另一个问题。
另外,如果这不是足够的代码,我可以添加更多。
答案 0 :(得分:5)
RegQueryValueEx不会调用SetLastError
,而是直接返回错误代码。
返回值
如果函数成功,则返回值为ERROR_SUCCESS 如果函数失败,返回值是系统错误代码。
如果lpData缓冲区太小而无法接收数据,则该函数返回ERROR_MORE_DATA 如果lpValueName注册表值不存在,则该函数返回ERROR_FILE_NOT_FOUND。
编辑回应评论:
我最初回答了您的具体问题,关于您发布的代码,仍然存在一些问题:
HKEY hKey;
DWORD dwDisp = REG_DWORD;
DWORD dwSize = sizeof(DWORD);
DWORD dwValue = 0;
DWORD dwReturn;
DWORD dwBufSize = sizeof(DWORD);
if( RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes"
,0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
DWORD error = RegQueryValueExW(hKey,L"ThemeChangesMousePointers",0,0, reinterpret_cast<LPBYTE>(&dwReturn), &dwBufSize);
if(error == ERROR_SUCCESS)
{
printf("Key value is: %d \n", dwReturn);
}
else
{
printf("Cannot query for key value; Error is: %d\n", error);
}
}
RegCloseKey(hKey);