【问题标题】:RegGetValueA format/layoutRegGetValueA 格式/布局
【发布时间】:2021-01-12 22:00:50
【问题描述】:

我正在尝试编写一个函数来检查注册表值以查看是否为 Windows 上的控制台启用了颜色。

Computer\HKEY_CURRENT_USER\Console\VirtualTerminalLevel

如果您通过注册表导航到此处,这是我需要检索的值。它是 1 或 0,1 启用 0 禁用。

#include <Windows.h>
    DWORD val;
    DWORD dataSize = sizeof(val);
    if (ERROR_SUCCESS == RegGetValueA(HKEY_LOCAL_MACHINE, "Computer\\HKEY_CURRENT_USER\\Console", "VirtualTerminalLevel", RRF_RT_DWORD, nullptr, &val, &dataSize)) {
        printf("Value is %i\n", val);
    }
    else {
        printf("Error reading.\n");
    }

这是我的尝试。这总是导致“错误读取”。我的问题是,我需要在 RegGetValueA 函数的“子键”和“值”参数中放置什么?

【问题讨论】:

  • 您的非代码示例使用HKEY_CURRENT_USER,但您的代码使用HKEY_LOCAL_MACHINE

标签: c++ windows registry


【解决方案1】:

您指定的值路径错误。不要在lpSubKey 参数中包含Computer\HKEY_CURRENT_USER。这只是为了人类可读性,实际上并不是 Registry API 使用路径的一部分。 lpSubKey 值相对于 hKey 根,在这种情况下应该是 HKEY_CURRENT_USER,而不是 HKEY_LOCAL_MACHINE

试试这个:

#include <Windows.h>

DWORD val;
DWORD dataSize = sizeof(val);

if (ERROR_SUCCESS == RegGetValueA(HKEY_CURRENT_USER, “Console", "VirtualTerminalLevel", RRF_RT_DWORD, nullptr, &val, &dataSize)) {
    printf("Value is %u”, val);
}
else {
    printf("Error reading.\n");
}

【讨论】:

  • 哦,好的,我知道我做了什么,谢谢。刚刚测试过,它可以工作。
  • 另外,下次不要只打印“读取错误”,还要打印错误代码。它的存在是有原因的。
猜你喜欢
  • 2016-07-19
  • 2013-04-30
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2018-07-28
  • 2011-10-28
相关资源
最近更新 更多