我试图编写一个检查注册表值的功能,以查看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函数的“子项”和“值”参数中放置什么?

最佳答案

您为该值指定了错误的路径。请勿在Computer\HKEY_CURRENT_USER参数中包括lpSubKey。这仅出于人类可读性考虑,实际上并不是注册表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");
}

关于c++ - RegGetValueA格式/布局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64083224/

10-09 05:02