Вторник, 07.05.2024, 18:48

MAXsoft

Наш опрос
Оцените мой сайт

Результат опроса Результаты Все опросы нашего сайта Архив опросов

Всего голосовало: 89
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Логин:
Пароль:
Поиск
Календарь
«  Март 2009  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » 2009 » Март » 23 » Работа с Системным реестром в C++ Builder (Класс TRegistry)
    Работа с Системным реестром в C++ Builder (Класс TRegistry)
    16:18

    В этой статье разберем работу с реестром, но сперва определим зачем это нужно. Реестр (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)"

    Просмотров: 2930 | Добавил: Fantom | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]