我试图从注册表中检索一些值.以下是完整路径:[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes]"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");
}
}
Run Code Online (Sandbox Code Playgroud)
我试过调试,看起来我的缓冲区输出变量给了我一个奇怪的输出:
键值为:2554292错误为0
每次我再次运行代码时,我都会得到不同的值.我怎样才能获得真正的价值而不是另一个?
编辑:上面的帖子已被编辑,以提出一个不同的问题.
此外,如果这不是足够的代码,我可以添加更多.
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);
Run Code Online (Sandbox Code Playgroud)