RegQueryValueEx给出奇怪的数据

时间:2013-04-24 01:58:42

标签: c++ windows unicode registry

DWORD dwType = REG_SZ;
TCHAR keyData[1024];
DWORD keyDataLength = 1024;
cchValue = MAX_VALUE_NAME; 
achValue[0] = '\0';     
HKEY currentKey;
long err = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), NULL, KEY_READ, &currentKey);
_tprintf(TEXT("OpenKey Error Code: %d\n"), err);
err = RegQueryValueEx(currentKey, TEXT("STEAM"), NULL, NULL, (LPBYTE)&keyData, &keyDataLength);
_tprintf(TEXT("QueryKey Error Code: %d\n"), err);
_tprintf(TEXT("Data: %d\n"), keyData);

上面的代码产生以下结果:

OpenKey Error Code: 0
QueryKey Error Code: 0
Data: 15332432

如何让keyData显示正确的结果?我在网上看了很长一段时间,这几乎与我在网上找到的工作示例重复...它是为UNICODE设置的,我不想切换字符集。

1 个答案:

答案 0 :(得分:3)

keyDataTCHAR的数组。尝试使用%s打印char数组。

 _tprintf(TEXT("Data: %s\n"), keyData);
                    //^^^ not %d

修改 谢谢@Windows programmer

此外,keyDataLength应该计算字节数,因此它应该是1024 * sizeof(TCHAR)或更简单sizeof(keyData)