1 Востаннє редагувалося Logans (03.05.2014 23:01:55)

Тема: Зчитування даних з реєстру Windows.

Добрий вечір.

Знову окремий випад, чи то мого нерозуміння, чи ще чогось. Коротше кажучи...

Завдання: Розробити програму, яка отримує з реєстра інформацію про одну з апаратних складових та одне з програмних налаштувань.

Пояснення: Зчитати з реєстру Windows дані про апаратне забезпечення та інформацію про якусь програму.
В моєму випадку:
    - апаратне забезпечення - Identifier процесора (Intel64 Family 6 Model 23 Stepping 10, наскільки я        розумію це щось типу марки процесора);
    - програма - шлях до VirtualBox.exe (C:\Program Files\Oracle\VirtualBox\).

Рішення: Скористався наступними джерелами:
  - http://www.dreamincode.net/forums/topic … -key-in-c/
  - http://stackoverflow.com/questions/3413 … y-properly
  - http://social.msdn.microsoft.com/Forums … =vcgeneral
  - http://stackoverflow.com/questions/6308 … e-question
  - Та на MSDN переглянув синтаксис функцій.

Код рішення
#include <iostream>
#include <Windows.h>
#include <WinReg.h>

using namespace std;

int main()
{
    HKEY keyHandle;
    char value[35];
    DWORD value_length = 35;
    DWORD Type;

    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Oracle\\VirtualBox", 0, KEY_QUERY_VALUE, &keyHandle) == ERROR_SUCCESS)
    {
        //RegQueryValueEx(keyHandle, "InstallDir", NULL, (LPDWORD)REG_SZ, (LPBYTE)&value, &value_length);
        RegGetValue(keyHandle, "SOFTWARE\\Oracle\\VirtualBox", "InstallDir", RRF_RT_ANY, NULL, (LPBYTE)&value, &value_length);
        
        cout << value << endl;
    } else
        cout << "Error!" << endl;
    
    RegCloseKey(keyHandle);

    system("pause");
    return 0;
}

Я намагався використати функції RegQueryValueEx(...) та RegGetValue(...) в обох випадках результат однаковий.

Щодо KEY_QUERY_VALUE, наскільки я зрозумів, це щось типу рівня доступу до реєстру цієї гілки, можливо це не так, але я ще використовув: KEY_ALL_ACCESS (перелік різновидів).

Результат: Умова If'a не виконується, а навіть якщо без неї, то результат - рандом з оперативної пам'яті.

Результат коли if закоментований

http://cdn.joxi.ru/uploads/prod/2014/05/03/09c/539/9fab20ee49a850540fe298b98d57b02d6c92b7f6.jpg

2

Re: Зчитування даних з реєстру Windows.

Обробляйте, що повертає RegGetValue.
Ну і ніби

RegGetValue(keyHandle, NULL, "InstallDir", RRF_RT_ANY, NULL, (LPBYTE)&value, &value_length);

Другий параметр - підключ, третій - назва змінної.

3

Re: Зчитування даних з реєстру Windows.

koala написав:

Обробляйте, що повертає RegGetValue.
Ну і ніби

RegGetValue(keyHandle, NULL, "InstallDir", RRF_RT_ANY, NULL, (LPBYTE)&value, &value_length);

Другий параметр - підключ, третій - назва змінної.

Нічого не змінилося.