我尝试了几个代码来从注册表加载一个字符串密钥,在测试它们之后我发现了这个我写下来的。但是一个非常令人困惑的事情是这个代码适用于HKEY_LOCAL_MACHINE / HARDWARE密钥,但不适用于SOFTWARE。我不知道我忽略了什么?
char rgValue [512];
char fnlRes [512];
DWORD size1;
DWORD Type;
HKEY hKey = 0;
char buf[512] = {0};
DWORD dwType = 0;
DWORD dwBufSize = sizeof(buf);
if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\SCADE\\HMI"), 0, KEY_QUERY_VALUE, &hKey ) == ERROR_SUCCESS)
{
dwType = REG_DWORD;
if( RegQueryValueEx( hKey, TEXT("test"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS)
{
cout << "key value is '" << buf << "'\n";
}
else
cout << "can not query for key value\n";
RegCloseKey(hKey);
}
else
cout << "Can not open key\n";
答案 0 :(得分:0)
您似乎正在从注册表中读取DWORD
值,但您尝试将其输出到控制台,就好像它是一个以空字符结尾的字符串。要阅读DWORD
,请将缓冲区变量从char[]
更改为DWORD
,并使用&
运算符将其地址传递给RegQueryValueEx()
,例如:
HKEY hKey = 0;
DWORD dwValue = 0;
DWORD dwType = 0;
DWORD dwBufSize = sizeof(dwValue);
LONG lRes;
lRes = RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\SCADE\\HMI"), 0, KEY_QUERY_VALUE, &hKey );
if (lRes == ERROR_SUCCESS)
{
lRes = RegQueryValueEx( hKey, TEXT("test"), 0, &dwType, (LPBYTE)&dwValue, &dwBufSize );
if (lRes == ERROR_SUCCESS)
{
if (dwType == REG_DWORD)
cout << "key value is " << dwValue << endl;
else
cout << "key value is not a DWORD" << endl;
}
else
cout << "can not query for key value. Error: " << lRes << endl;
RegCloseKey(hKey);
}
else
cout << "Can not open key. Error: " << lRes << endl;