RegGetValueA format/layout

RegGetValueA format/layout

我正在尝试编写一个函数来检查注册表值以查看是否为 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 函数的“子键”和“值”参数中放置什么?

您指定的值路径错误。不要在 lpSubKey 参数中包含 Computer\HKEY_CURRENT_USER。这只是为了便于阅读,实际上并不是供注册表 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");
}