Не могу считать значение ключа реестра

186
16 марта 2018, 14:00

Есть ключ в реестре:

HKEY_CURRENT_USER\Software\Posix\NetStat

А у ключа есть значение

Downloaded типа REG_SZ со значением done

Пытаюсь считать его значение. Ничего не выходит.

#include <windows.h>
#include <iostream>
#include <string>
using namespace std;

int main() {
    char buf[1024];
    HKEY hKey = HKEY_CURRENT_USER;
    ULONG result;
    DWORD sz = 1024;
    // open section and get hKey handler
    result = RegOpenKeyExA(
        hKey,
        "Software\\Posix\\NetStat",
        0,
        REG_SZ,
        &hKey);
    if (result != ERROR_SUCCESS) {
        cout << "Can't open section" << endl;
        RegCloseKey(hKey);
    }
    // get desired value
    result = RegGetValueA(
        hKey,
        "Software\\Posix\\NetStat",
        "Downloaded",
        RRF_RT_ANY,
        NULL,
        (LPDWORD)buf,
        &sz);
    if (result != ERROR_SUCCESS) {
        cout << "Can't get value of Downloaded" << endl;
        RegCloseKey(hKey);
    }
    system("pause");
    return 0;
}

После выполнения первой функции result равен 0. То есть первая функция работает. После выполнения второй функции result равен 2.

#define ERROR_FILE_NOT_FOUND 2L

Разумеется никакого значения функция в buf не возвращает.. Вот ссылка на описание функции на MSDN. Только там RegGetValue().

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724868(v=vs.85).aspx

Answer 1

В общем, проблема у вас, по всей видимости, тут:

result = RegOpenKeyExA(
    hKey,
    "Software\\Posix\\NetStat",
    0,
    REG_SZ,
    &hKey);

В частности RegOpenKeyExA изменяет значение &hKey. Более того, использовать RegOpenKeyExA вообще не имеет смысла, так как она просто открывает ключ в реестре, а вам нужно прочитать значение. И, как писали в комментариях выше, в документации есть флаг RRF_SUBKEY_WOW6464KEY. Вот рабочий пример:

RegGetValueA(
    HKEY_CURRENT_USER, 
    "Software\\Posix\\NetStat", 
    "Downloaded", 
    RRF_RT_ANY | RRF_SUBKEY_WOW6464KEY, 
    NULL, 
   (LPDWORD)buf, 
    &sz
);

Вызывать RegCloseKey по всей видимости, тоже не нужно.

READ ALSO
Считать один байт из файла

Считать один байт из файла

Как считать один байт из файла? Следующий код работает, но некоторые байты пропускаются (0x09, 0x0a, 0x0b, 0x0c, 0x0d) и считывается следующий за ними...

183
Проблема GROUP BY в SQL Server HIBERNATE

Проблема GROUP BY в SQL Server HIBERNATE

Я не могу решить ошибку

187
Не могу подключить proxy к selenium

Не могу подключить proxy к selenium

Мне нужно подключить прокси с авторизацией, я только разобрался с работой selenium, думал и с этим разберусь, но ничего не выходитВроде бы как...

186
Как обработать картинку?

Как обработать картинку?

Обработкой картинок не занималсяЕсть картинка - на белом фоне синие точки

134