В этой статье разберем работу с реестром, но сперва определим зачем это нужно.
Реестр (Registry) - это регистрационная база данных Windows и ее приложений.
Раньше все установки записывались в *.ini файлы (например
WINDOWS.INI), но за частую в них хранилось несколько сотен байт
и их было много, что не очень хорошо. Сейчас все установки
и параметры, такие как положение окна при последнем завершение приложения,
расположение нужных файлов, установки интерфейса – все это
хранится в реестре.
Чтобы посмотреть что из себя представляет реестр, запустите программу (Пуск->Выполнить)
regedit.exe из каталога Windows, которая может и изменять реестр.
По сути это иерархический набор ключей. Необходимо заметить три
особенности:
1. Все ключи могут иметь различное количество значений разных
типов;
2. Ключ может иметь подключи;
3. В любом ключе есть значение «По умолчанию»;
Система ключей очень похожа на файловую систему, да и Regedit
похож на проводник. Но надо отметить одну особенность: реестр
имеет шесть стандартных корневых ключей, и этого не изменить.
Для работы с реестром, есть и стандартные функции API, но
в C++ Builder имеется класс TRegistry для работы с реестром, который
мы и рассмотрим. TRegistry имеет четыре свойства:
CurentKey: содержит текущее значение ключа. Значение ключа –
это целое число, которое идентифицирует ключ. Обычно от этого свойства
мало толку.
RootKey: содержит строку - имя текущего корневого ключа (по умолчанию
\HKEY_CURENT_USER).
CurrentPath: содержит строку - имя и путь текущего ключа ,без корневого.
LazyWrite: определяет – предавать управление приложению во время
записи данных в ключ (true), или не передавать до тех пор пока запись
не завершится (false).
Также класс Tregistry содержит несколько методов для работы с реестром.
Такие как:
CloseKey - закрывает ключ и записывает в него данные.
CreateKey - создает ключ, но не открывает его.
DeleteKey - удаляет любой ключ, для удаления текущего можно просто
передать пустую строку.
GetKeyNames - возвращает потомку TStrings все его подключи.
GetValueNames - возвращает имена всех элементов ключа.
KeyExists - true - если указанный ключ существует, false – если
нет.
OpenKey() - открывает указанный ключ, имеет два параметра. Второй
параметр отвечает за то создавать ключ если он не существует или
нет (true, false).
ValueExists - true – если указанный элемент данных существует.
LoadKey, SaveKey -эти методы загружают и сохраняют ключ на
диске.
ReadBool - этот и следующие методы читают из указанного элемента
ключа данные определенного типа.
ReadDateTime
ReadFloat
ReadInteger
ReadString
WriteBinaryData - этот и следующие методы записывают в указанный
элемент ключа данные соотествующего типа.
WriteBool
WriteDateTime
WriteFloat
WriteInteger
WriteString
Механизм работы с реестром примерно следующий:
1. Открыть ключ (OpenKey())
2. Прочитать или записать данные
3. Закрыть ключ (CloseKey()), хотя деструктор класса Tregistry
и может закрыть ключ сам, но это поможет при одиночном или последнем
чтении.
Пример чтения из реестра:
TRegistry regKey = *new TRegistry(); bool keyGood = regKey.OpenKey("C++Builder Test", false); if (!keyGood) return; int top = regKey.ReadInteger("Top"); int left = regKey.ReadInteger("Left"); int width = regKey.ReadInteger("Width"); int height = regKey.ReadInteger("Height"); delete regKey;
Если кого смущает объявление regKey – это указатель –тип
ссылки.
Отметим две особенности:
Смена корневого ключа производится свойством RootKey, например
regKey.RootKey="HKEY_CLASSES_ROOT";
Обращение к параметру ключа по «умолчанию» производится указанием
вместо параметра ключа пустой строки:
WS=regKey.ReadString("");
Информация о статье "Работа с Системным реестром в C++ Builder (Класс TRegistry)"
|