Есть ключ в реестре:
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
В общем, проблема у вас, по всей видимости, тут:
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 по всей видимости, тоже не нужно.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей