如何打印HKEY或将其转换为字符串?

时间:2013-12-16 12:04:05

标签: c++ winapi

我试图获取注册表项的值然后再看它

以下代码摘录

HKEY hkey;

RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\SomeSoft\\Settings", 0, 0x20019u, &hKey);

printf("121 hkey= %s \n", hKey);    

正在编译,但在运行时停止。

问题:如何在可见的东西中转换hkey,比如字符串 为了看到它?

3 个答案:

答案 0 :(得分:1)

HKEY不是字符串,而是整数值。所以,会发生什么事情是你的程序将hKey视为char的以null结尾的数组,并且可能是导致运行时失败的原因。

您必须为您拥有的数据类型使用适当的格式字符串。这是printf的缺陷之一,也是如果可以的话,你应该更喜欢C ++流输出机制的原因之一。

请注意HKEY是指针大小的。因此,如果您希望代码适用于32位和64位进程,那么您需要在格式字符串中允许这样做。最简单的方法是将其视为指针并使用%p

您还应该确保执行错误检查。您忽略了RegOpenKeyEx的返回值,您不能这样做。如果只是通过注意函数返回的值来揭示代码的真正问题,我就不会感到惊讶。

不要对samDesired参数使用魔术常量。通过使用按位或运算符组合标志来指定它。或者在您的情况下,传递KEY_READ

答案 1 :(得分:1)

我不太确定“将HKEY转换为字符串”是什么意思:

  1. 如果您想获取HKEY的数值,请像打印指针一样打印,例如

    printf( "hkey = %p\n", hkey );
    
  2. 如果您要打印HKEY句柄所代表的路径,请参阅this answer

  3. 如果要打印HKEY引用的注册表项的字符串值,请使用RegQueryValueEx函数。

答案 2 :(得分:0)

退回的HKEY是一个句柄。使用RegQueryValueEx获取实际的注册表值。