Меню
Категории
Работа с системным реестром Windows на C++
21 марта, 2008 Программинг

Работа с системным реестром Windows на C++. В сегодняшней статейке, я расскажу вам, как вы можете читать, писать ключи в реестр, создавать разделы в реестре и т.д. Функции RegOpenKeyEx, RegQueryValueEx, RegCreateKeyEx, RegCloseKey. В примере ниже я покажу как узнать куда сохраняет настройки программа Reget. А именно, как изменить станартную папку закачки.

#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
//——————————-
HKEY rKey;
unsigned char Reget[512];
DWORD RegetPath = sizeof(Reget);
RegOpenKeyEx(HKEY_CURRENT_USER, “Software\\ReGet Software\\ReGetDx\\History\\Download\\SaveTo”, 0, KEY_QUERY_VALUE, &rKey);
RegQueryValueEx(rKey, “A”, NULL, NULL, Reget, &RegetPath);
RegCloseKey(rKey);
//——————————
printf(“%s”,Reget);
getchar();
return 0;
}


В нашем примере мы использовали функции RegOpenKeyEx, RegQueryValueEx, RegCreateKeyEx, RegCloseKey. Сегодня мы поговорим только о них.

Функция RegOpenKeyEx открывает указанный ключ.

LONG RegOpenKeyEx(
HKEY hKey, // дескриптор указанного ключа
LPCTSTR lpSubKey, // адрес имени открываемого подключа
DWORD ulOptions, // зарезервировано
REGSAM samDesired, // маска доступа безопасности
PHKEY phkResult // адрес дескриптора открытого ключа
);

Функция RegQueryValueEx возвращает тип и данние указанного значения по имени, ассоциирующимся с открытым ключом реестра.

LONG RegQueryValueEx(
HKEY hKey, // дескриптор ключа
LPTSTR lpValueName, // адерс имени значения
LPDWORD lpReserved, // зарезервировано
LPDWORD lpType, // адрес переменной для типа значения
LPBYTE lpData, // адрес буфера для данных
LPDWORD lpcbData // адрес переменной для размер буфера данных
);

Функция RegCreateKeyEx создает указанный ключ. Если ключ уже существует в реестре, то функция открывает его. Эта функция оставлена для совместимости с Windows версии 3.1. Приложения для Win32 должны использовать функцию RegCreateKeyEx.

LONG RegCreateKeyEx(
HKEY hKey, // дескриптор открытого ключа
LPCTSTR lpSubKey, // адрес имени подключа
DWORD Reserved, // зарезервировано
LPTSTR lpClass, // адрес строки класса
DWORD dwOptions, // флаг особых опций
REGSAM samDesired, // желаемый доступ безопасности
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // адрес структуры ключа безопасности
PHKEY phkResult, // адрес буфера для открытого ключа
LPDWORD lpdwDisposition // адрес буфера характерного значения
);

Функция RegCloseKey освобождает дескриптор указанного ключа.

LONG RegCloseKey(
HKEY hKey // дескриптор ключа на закрытие
);

7 комментариев
  1. А смысл такого редактирования?

  2. printf(“%s”,Reget);
    Интересно. А не проще ли printf(Reget)?

  3. это создано для автоматизации инсталяции программ на компьютер, реестр = приложения, одно без другого не может но удобство высокое)
    :)”

  4. ошибки почему-то выводит. как создать подобный проект в 10ой студии?
    RegOpenKeyExW: невозможно преобразовать параметр 2 из “const char [13]” в “LPCWSTR”

  5. Денис в WINAPI это частое дело? вот так нужно написать L перед ковычками означает литерал, то есть юникод, то есть wchar_t, который занимает 2 байта
    RegOpenKeyEx(HKEY_CURRENT_USER,L”Software\\ReGet Software\\ReGetDx\\History\\Download\\SaveTo”, 0, KEY_QUERY_VALUE, &rKey);

  6. Кракозябры выдает:
    VS2008, Win7 x64

  7. Почему-то крякозябры выводит

Добавить комментарий




*