- •Министерство образования и науки Российской Федерации
- •1. Работа с реестром
- •1.1. Создание - открытие раздела
- •1.2. Чтение параметров раздела реестра
- •1.3. Занесения значения параметра раздела реестра
- •1.4. Закрытие раздела
- •1.5. Удаление раздела
- •2. Диалоговые окна. Определение и назначение
- •2.1. Описание диалогового окна в файле ресурсов
- •2.2. Функция диалогового окна
- •2.3. Вызов модального диалогового окна
- •2.4. Закрытие модального диалогового окна
- •2.5. Вызов немодального диалогового окна
- •2.6. Получения и занесения данных в элементы управления диалогового
- •3. Порядок выполнения работы
- •4. Контрольные вопросы
- •Приложение Файл reg_dlg.Cpp
- •Файл reg_dlg.Rc
- •Файл resource.H
1.2. Чтение параметров раздела реестра
Для того, чтобы считать значение параметра раздела необходимо выяснить его размер и выделить под него память для этого необходимо вызвать функцию RegQueryValueEx с пятым параметром равным NULL, этот параметр отвечает за указатель на буфер для хранения значения.
Далее вызываем туже функцию, но в этот раз пятый параметр будет указывать на буфер, под который уже выделили память.
Функция RegQueryValueEx считывает тип и значение по имени параметра из открытого раздела.
LONG RegQueryValueEx(
HKEY hKey, |
// дескриптор раздела |
LPTSTR lpValueName, |
// указатель на имя раздела |
LPDWORD lpReserved, |
// зарезервировано |
LPDWORD lpType, |
// указатель на буфер для типа параметра |
LPBYTE lpData, |
// указатель на буфер для значения параметра |
LPDWORD lpcbData |
// указатель буфер, содержащий размер данных |
); |
|
hKey - идентифицирует текущий открытый раздел или любой из следующих предопределенных разделов:
HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS
lpValueName указывает на строку, оканчивающуюся нулевым символом, содержащую имя параметра, которое запрашивается
lpReserved – зарезервирован, должен быть равным нулю
lpType – указывает на переменную, в которую помещается тип параметра раздела, может быть равен NULL, если не требуется.
Некоторые типы параметров:
Таблица 2.3. Типы параметров (значений)
Тип |
Описание |
REG_BINARY |
Двоичные данные в любой форме |
REG_DWORD |
32 битное значение |
REG_MULTI_SZ |
Массив строк, заканчивающийся двойным нулевым символом |
REG_NONE |
Неопределенный тип |
REG_SZ |
Строка, оканчивающаяся нулевым символом |
lpData - указывает на буфер, в который будет помещено значение параметра, этот параметр может быть NULL, если значение не требуется.
lpcbData – указатель на переменную, определяющую размер в байтах буфера для приема значения, на который указывает lpData, в случае если lpData равен NULL, то в lpcbData возвращается размер значения в байтах, может равняться NULL только в том случае, если lpData равен NULL.
Возвращает ERROR_SUCCESS в случае успешного завершения, в противном случае возвращает ненулевой код ошибки.
Раздел hKey должен быть открыт с доступом не меньшим KEY_QUERY_VALUE.
Пример вызова:
// считывается размер значение
if (RegQueryValueEx(hKeyRes, ValueName,
NULL, &dwType, NULL, &dwSize)==ERROR_SUCCESS)
{
pBuffer=new unsigned char[dwSize];
/* считывается значение параметра из раздела реестра */
if ((RegQueryValueEx(hKeyRes, ValueName,NULL, &dwType, pBuffer, &dwSize))==ERROR_SUCCESS && pBuffer!=NULL)
{
. . .