我试图获取注册表项的值然后再看它
以下代码摘录
HKEY hkey;
RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\SomeSoft\\Settings", 0, 0x20019u, &hKey);
printf("121 hkey= %s \n", hKey);
正在编译,但在运行时停止。
问题:如何在可见的东西中转换hkey,比如字符串 为了看到它?
答案 0 :(得分:1)
HKEY
不是字符串,而是整数值。所以,会发生什么事情是你的程序将hKey
视为char
的以null结尾的数组,并且可能是导致运行时失败的原因。
您必须为您拥有的数据类型使用适当的格式字符串。这是printf
的缺陷之一,也是如果可以的话,你应该更喜欢C ++流输出机制的原因之一。
请注意HKEY
是指针大小的。因此,如果您希望代码适用于32位和64位进程,那么您需要在格式字符串中允许这样做。最简单的方法是将其视为指针并使用%p
。
您还应该确保执行错误检查。您忽略了RegOpenKeyEx
的返回值,您不能这样做。如果只是通过注意函数返回的值来揭示代码的真正问题,我就不会感到惊讶。
不要对samDesired
参数使用魔术常量。通过使用按位或运算符组合标志来指定它。或者在您的情况下,传递KEY_READ
。
答案 1 :(得分:1)
我不太确定“将HKEY
转换为字符串”是什么意思:
如果您想获取HKEY的数值,请像打印指针一样打印,例如
printf( "hkey = %p\n", hkey );
如果您要打印HKEY
句柄所代表的路径,请参阅this answer。
如果要打印HKEY
引用的注册表项的字符串值,请使用RegQueryValueEx
函数。
答案 2 :(得分:0)
退回的HKEY是一个句柄。使用RegQueryValueEx
获取实际的注册表值。