Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
8
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

7.3. Використання реєстру в додатках

У перших версіях операційної системи Windows додатки зберігали параметри налаштування і власні опції у файлах ініціалізації, які, як правило, мали розширення .INI. У сучасних версіях Windows-додаток може зберігати необхідну для його запуску інформацію в централізованому системному реєстрі Registry. Системний реєстр полегшує розподіл інформації про налаштування між декількома процесами. У даному розділі ви зможете познайомитися з деякими сторонами існування системного реєстру і навчитися самостійно програмувати роботу з ним в додатках.

Як встановлюється системний реєстр

У попередніх версіях Windows INI-файли представляли собою звичайні текстові файли, які можна було обробляти за допомогою будь-якого текстового редактора. На відміну від них системний реєстр Registry містить як двійкову інформацію, так і символьну, записану в кодах ASCII. Вміст Registry можна редагувати тільки за допомогою спеціальної програми Registry Editor або за допомогою спеціальних функцій API, розроблених саме для цієї мети. Якщо вам коли-небудь доводилося використовувати Registry Editor для перегляду системного реєстру, то для вас не повинно бути новиною, що останній містить величезну кількість інформації, організованої у вигляді ієрархічної деревоподібної структури. На рис. 7.5 показано, яким чином вміст реєстру видається користувачеві при першому зверненні до Registry Editor. (Цю програму, виконуваний файл якої називається RegEdit.EXE, можна знайти в головній папці Windows або запустити на виконання з меню Start (Пуск) за допомогою команди Run (Виконати), набравши в полі введення імені файлу regedit, а потім клацнувши на ОК. У Windows NT файл називається RegEdit32.EXE.)

Рис. 7.5. RegistryEditor дозволяє переглянути системний реєстр

У лівому вікні перераховані ключі реєстру. Знак плюс (або трикутник) поруч з ім'ям ключа означає вузол дерева, який можна "розвернути", щоб побачити більш детальну інформацію про ключ. Кожен ключ має кілька рівнів ієрархії, які при бажанні можна послідовно розгортати. Кожен ключ (або його підключі) може мати (а може і не мати) асоційований з ним параметр. На рис. 7.6 показані параметри, асоційовані з поточним дизайном екрану. Якщо треба дістатися до цих параметрів, необхідно розгорнути послідовно HKEY_CURRENT_USER, Control Panel, Appearence і Schemes, і праворуч будуть знаходитись параметри схеми дизайну екрану, встановлені в системі.

Попередньо визначенні ключі

Для того щоб дізнатися, що зберігається в реєстрі, треба познайомитися із зумовленими ключами та їх призначенням. На рис. 7.5 представлено наступні ключі.

HKEY_CLASS_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

HKEY_CURRENT_CONFIG

Рис. 7.6. Структура реєстру у вигляді ієрархічного дерева

Ключ HKEY_CLASS_ROOT зберігає інформацію про типи документів і властивості, а також інформацію про класи і різні додатки, встановлені на комп'ютері. Наприклад, якщо ви розгорнете цей ключ на своєму комп'ютері, то, швидше за все, знайдете в розгорнутому списку елемент з розширенням файлу .doc, під яким будуть перераховані програми, які можуть обробляти документи цього типу (рис. 7.7).

Рис. 7.7. Інформація про документи у ключі HKEY_CLASS_ROOT

Ключ HKEY_CURRENT_USER містить всі системні установки, зроблені користувачем, включаючи схему кольорів, принтери, програмні групи і т.п. З іншого боку, ключ HKEY_LOCAL_MACHINE містить статусну інформацію, що стосується комп'ютера, а ключ HKEY_USERS організовує інформацію про кожного користувача системи і про конфігурацію системи за замовчуванням. І нарешті, ключ HKEY_CURRENT_CONFIG містить інформацію про конфігурації апаратних засобів системи. Крім зазначених ключів, може мати місце ключ HKEY_DYN_DATA, який включає інформацію про динамічні дані реєстру, тобто про дані, які часто змінюються.

Використання реєстру в MFC-додатках

Для роботи з реєстром в MFC-додатках використовується клас CWinApp та його метод SetRegistryKey(). Цей метод створює новий або відкриває в дереві реєстру існуючий вузол, відповідний ключу програми. Все, що потрібно від програміста, – передати ім'я ключа (як правило, ім'я фірми) як аргумент методу, наприклад

SetRegistryKey("MyCoolCompany");

Функцію SetRegistryKey() потрібно викликати усередині функції InitInstance(), яка викликається тільки одного разу – при запуску програми.

Після того як буде викликана функція SetRegistryKey(), додаток зможе створити підключі і задати їх параметри, викликавши ще одну або дві функції-члени класу CWinApp. Функція WriteProfileString() включає параметр-рядок до реєстру, а WriteProfileInt() включає цілочисельний параметр до реєстру. Для того щоб отримати параметри з реєстру, можна використовувати методи GetProfileString() і GetProfileInt(). (Крім того, для звернення до параметрів реєстру можна використовувати методи RegSetValueEx() і RegQueryValueEx().)

На замітку. У перших версіях функції WriteProfileString(), WriteProfileInt(), GetProfileString() і GetProfileInt() програмувався обмін інформацією з INI-файлом. Однак якщо перед викликом цих методів відбувається звернення до SetRegistryKey(), то MFC перепризначає приймач-джерело інформації – встановлює в якості такого системний реєстр.

Ревізія раніше створених додатків

У цьому розділі ви, можливо, самі того не підозрюючи, створили програму, яка звертається до системного реєстру. Нижче наведено фрагмент тексту функції CMultiStringApp::InitInstance() у тому вигляді, в якому він згенерований AppWizard. Точно такий же вигляд має і заготовка методу CFileDemoApp::InitInstance().

// Змініть ключ реєстрації, під яким зберігаються

// ваші установки.

// Після редагування в цьому рядку повинно бути щось,

// пов'язане з найменуванням вашої компанії

// або організації.

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

LoadStdProfileSettings(); // Завантаження стандартних

// опцій INI-файлів (включаючи MRU).

Абревіатура MRU означає Most Recently Used (останні, якими користувалися, – свіжі) і має відношення до файлів, список яких наводиться в меню File після того, як ви відкриєте з його допомогою хоча б один файл (причому не має значення, коли це було зроблено: у поточному або попередніх сеансах роботи програми).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]