урок 39
Робота з реєстром операційної системи.
Робота з реєстром операційної системи.
Формально, додатки можуть зберігати в реєстрі будь-які дані, однак вони повинні дотримувати наступних “правил поведінки”:
До реєстру записуються тільки дані про конфігурацію й ініціалізацію додатка. Інші дані повинні зберігатися в іншім місці.
Дані, що мають розмір більше двох кілобайт повинні зберігатися у файлі. До реєстру записується ім'я цього файлу.
Код, що виконується, не повинний зберігатися в реєстрі.
Значення займають менше місця, чим ключі. Додаток повинний, по можливості, групувати свої дані в структуру, а не створювати ключ для кожного елемента даних
Перед записом інформації до реєстру необхідно визначити, до чого відноситься ця інформація: чи є вона загальної для всіх користувачів чи комп'ютера специфічна для кожного окремого користувача
Інформація загальна для всіх користувачів повинна заноситися в ключ виду:
HKEY_LOCAL_MACHINE\Software\MyCompany\MyProduct\1.0
Інформація специфічна для користувача повинна заноситися в ключ виду:
Функція Виконувана дія
RegCreateKey
RegCreateKeyEx Створення підключа
RegOpenKey
RegOpenKeyEx Одержання описувача існуючого ключа (відкриття ключа)
RegSetValue
RegSetValueEx Запис нового імені даних у ключі і запис цих даних
RegQueryValue
RegQueryValueEx Читання значення з ключа по імені даних
RegEnumValue Читання значення з ключа по номері даних
RegCloseKey Закриття ключа і відновлення реєстру
RegNotifyChangeKeyValue Визначення події, що повинне відбутися при зміні заданого значення в реєстрі
Приклад програми, що працює з реєстром
#include <windows.h>
#include <stdio.h>
main()
{ HKEY MyKey ;
LONG ErrorCode ;
char Value[80] ;
char Name[80] ;
DWORD NameSize ;
DWORD ValueSize ;
int і ;
/* Створення нового підключа */
ErrorCode = RegCreateKey(HKEY_CURRENT_USER,
"\\Software\\MyCompany\\MyProduct\\1.0\\aaa",
&MyKey );
if ( ERROR_SUCCESS != ErrorCode )
return 1 ;
/* Запис у підключ десятьох нових даних з ім'ям Namex і значенням Valuex */
for ( i = 0 ; i < 10 ; i++ ) {
sprintf( Name, "Name%d", i ) ;
sprintf( Value, "Value%d", i ) ;
ErrorCode = RegSetValueEx( MyKey,Name,0,REG_SZ,
Value,strlen(Value)+1);
if ( ERROR_SUCCESS != ErrorCode )
return 2 ;
}