【问题标题】:RegQueryValueEx giving strange dataRegQueryValueEx 给出奇怪的数据
【发布时间】:2013-04-24 01:58:41
【问题描述】:
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,我不想切换字符集。

【问题讨论】:

  • MAX_VALUE_NAME 设置为什么?

标签: c++ windows unicode registry


【解决方案1】:

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

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

编辑 谢谢@Windows programmer

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

【讨论】:

  • 是的。另外,keyDataLength 应该计算字节数,所以它应该是 1024 * sizeof(TCHAR) 或更简单的 sizeof keyData。
  • @Windowsprogrammer 感谢您指出这一点,我在查看打印输出时没有注意到这一点。
猜你喜欢
  • 2023-04-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2014-10-29
相关资源
最近更新 更多