Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Mobtime Cell Phone Manager v5.3.1
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Программирование -> Delphi / Pascal -> Как работать с реестром


Как работать с реестром

Реестр - один из важнейших элементов Windows. Там можно найти множество настроек Windows и других программ. Сейчас программистов больше привлекает хранение опций своих программ в реестре нежели в различных ini файлах. Приемущество очевидно : ini файл можно случайно изменить, удалить, или повредить какими-либо некоректными действиями; С записями в реестре это сделать гораздо сложнее... Реестр открывает новые возможности в программировании, в управлении "чужими" программами и других действиях. К примеру в реестре можно прописать программы, которые будут загружаться при старте Windows, но их не будет ни в :"Автозагрузке" ни в Autoexec.bat..., а в реестре их довольно трудно найти даже опытному программисту. Так что - дерзайте. Я уверен, что знание ключевых моментов в этой области значительно облегчит Ваш труд...

Работа с реестром разделяется на несколько этапов.

1. Вы должны объявить подключение модуля Registry в Uses.
2. Необходимо создать переменную типа TRegistry и инициализировать ее.
3. Собственно работа с реестром.

4. Уничтожение переменной.

Uses

..., Registry,...

Var

Reg:Tregistry; // Создание переменной Reg

begin

Reg:=TRegistry.create; // Инициализирование этой же переменной

//------------ Программа------------

Reg.Destroy;

end;



Пункты 1, 2, 4 - ясны. Поэтому оставшаяся часть статьй будет посвящена именно 3-му пункту - работе с реестром. Самое первое дело, после выполнения второго пункта, это определение корневого ключа реестра. Он определяется с помощью свойства RootKey переменной Reg.

Корневые ключи реестра:

HKEY_CLASSES_ROOT (по умолчанию)
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA


Следующие свойства:

CurrentPath: String; Определяет путь к текущему ключу. CurrentKey: HKEY; Определяет открытый в настоящее время ключ реестра.

Procedure CloseKey;

Закрывает открытый в данный момент ключ реестра и записывает в реестра все изменения (если таковые были), произведенные в данном ключе. Вызов CloseKey несколько раз или при отсутствии открытого ключа не вызывает ошибки.

function CreateKey(const Key: String): Boolean;

Создает ключ Key (где Key - путь с разделителями "", например SoftwareTest. Имя корневого ключа в пути не указывается !! Он задается через property RootKey. Возвращает True при успешном создании

function DeleteKey(const Key: String): Boolean;

Удалить ключ Key (аналогично CreateKey, только с точностью до наоборот)

function DeleteValue(const Name: String): Boolean;

Удалить параметр с именем Name текущего ключа. Очевидно, что предварительно необходимо открыть этот ключ

function GetDataInfo(const ValueName: String; var Value: TRegDataInfo): Boolean;

Получить информацию о параметре ValueName текущего ключа - его тип и размер. При написании программ применяется редко, т.к. программист и сам знает, какого типа его параметры. А вот при написании разного рода утилит для просмотра и редактирования реестра он просто незаменим.

Типы:

TRegDataType = (rdUnknown, rdString, rdExpandString, rdInteger, rdBinary);

TRegDataInfo = record

RegData: TRegDataType; // Тип ключа

DataSize: Integer; // Размер данных end;

Данная функция возвращает комплексную информацию о параметре, для получения данных о размере или типе можно применять GetDataSize и GetDataType

function GetDataSize(const ValueName: String): Integer;

Получить размер параметра ValueName текущего ключа в байтах. Если - при ошибке. Для строкового параметра размер учитывает в размере и один байт для #0, завершающего строку .

function GetDataType(const ValueName: String): TRegDataType;

Получить тип текущего ключа.

procedure GetKeyNames(Strings: TStrings);

Заполняет указанный Strings списком под ключей текущего ключа. Применяется для построения программ просмотра реестра или в том случае, когда количество подключей неизвестно. Например, одна из моих программ создает в одном из ключей несколько подключей с одинаковой структурой, но их количество заранее неизвестно (настройки пользователей).

procedure GetValueNames(Strings: TStrings);

Заполняет указанный Strings списком параметров текущего ключа.

function HasSubKeys: Boolean;

Возвращает True, если текущий ключ имеет подключи и False в противном случае

function KeyExists(const Key: String): Boolean;

Возвращает True, если ключ Key существует. Полезная функция, рекомендуется применять ее перед открытием ключей.

function LoadKey(const Key, FileName: String): Boolean;

Создает ключ Key и загружает в него данные из файла с именем FileName. Полезно при написании инсталляторов. Возвращает True при успешном выполнении.

procedure MoveKey(const OldName, NewName: String;

Delete: Boolean); Копировать или переименовать ключ. В любом случае копирует все из ключа OldName в NewName (со всеми подключами). После копирования анализируется Delete, и если он true, то ключ OldName уничтожается со всем содержимым. Лично у меня не было потребности в применении данной функции - она не требуется программ и предначначена для построения редакторов реестра

function OpenKey(const Key: String; CanCreate: Boolean): Boolean;

Очень важная функция - с нее начинается работа с ключом. Key - имя открываемого ключа. Если ключ с указанным именем не найден и CanCreate=true, то производится попытка создать ключ с указанным именем. Возвращает признак успешности открытия ключа, его обязательно следует анализировать.

function OpenKeyReadOnly(const Key: String): Boolean;

Тоже, что и OpenKey, но открытие идет в режиме "только чтение" Внимание !!!!!! Все функции типа Read** при вызове генерируют исключение, если параметр не найден. Это исключение следует отлавливать при помощи try except или проверять наличие параметра при помощи ValueExists перед его чтением.

function ReadBinaryData(const Name: String; var Buffer; BufSize: Integer): Integer;

Читает значение параметра с именем Name текущего (открытого) ключа в Buffer размером BufSize.

function ReadBool(const Name: String): Boolean;

Считать значение параметра с именем Name типа Boolean function

ReadDate(const Name: String): TDateTime;

Считать значение параметра с именем Name типа дата

function ReadDateTime(const Name: String): TDateTime;

Считать значение параметра с именем Name типа дата-время

function ReadTime(const Name: String): TDateTime;

Считать значение параметра с именем Name типа время

function ReadFloat(const Name: String): Double;

Считать значение параметра с именем Name типа Double

function ReadInteger(const Name: String): Integer;

Считать значение параметра с именем Name типа Integer

function ReadString(const Name: String): String;

Считать значение параметра с именем Name типа String

function RegistryConnect(const UNCName: String): Boolean; Подключить сетевой реестр машины UNCName (формат: \сетевое имя машины). Перед вызовом этой функции программа должна установить RootKey в значение HKEY_USERS или HKEY_LOCAL_MACHINE. При успешном соединении и открытии удаленного реестра его RootKey ставится в заданное перед вызовам значение свойства RootKey и возвращается True.

procedure RenameValue(const OldName, NewName: String);

Переименовать параметр текущего ключа с именем OldName в NewName.

function ReplaceKey(const Key, FileName, BackUpFileName: String): Boolean;

Заменить место хранения ключа. Обычно ключи хранятся в базовом файле реестра, нот вызовом данной функции можно задать в качестве места хранения ключа отдельный файл с именем FileName (его следует предварительно создать при помощи savekey). При каждой перезагрузке компьютера ключ Key будет загружаться значениями, считываемыми из файла этого файла FileName,т.е. по сути мы имеет дело с ульем (hive) в терминологии Windows NT. Определение: Улей - часть реестра (его ячейка). Улей является дискретным набором ключей, подключей и параметров, который находится вверху иерархии реестра. Улей поддерживается одиночным файлом. BackUpFileName - имя резервной копии, которая создается перед перезаписью данных ключа Key. Если кого интересуют подробности, то следует почитать книгу по реестру Windows NT, главы типа "Ульи и файлы" и "Целостность и восстановление улья в реестре". При разработке практических приложений я не разу не применял этот вызов.

function RestoreKey(const Key, FileName: String): Boolean;

Открывает указанный ключ и перезаписывает его данные и подключи данными из файла FileName.

function SaveKey(const Key, FileName: String): Boolean;

Сохраняет все параметры указанного ключа и всех его подключей в файле FileName. Может применяться совместно с LoadKey и RestoreKey для создания и восстановления ключей реестра.

function UnLoadKey(const Key: String): Boolean;

Удалить улей Key из реестра.

function ValueExists(const Name: string): Boolean;

Проверить, существует ли в текущем ключе параметр с именем Name. Весьма полезная функция, т.к. чтение несуществующего параметра приводит к исключительной ситуации

procedure WriteBinaryData(const Name: String; var Buffer; BufSize: Integer);

Записать в параметр с именем Name данные из буфера Buffer размером BufSize. Если параметр существовал, то он будет перезаписан. Если параметр не существовал, то он будет создан. Это справедливо и для всех последующих процедур записи параметров

Остальные процедуры записи - WriteBool, WriteCurrency,WriteDate,WriteDateTime, WriteExpandString, WriteFloat, WriteInteger, WriteString, WriteTime имеют по два параметра - (имя ключа, значение ключа).

Ну вот, класс описали, теперь приведем парочку примеров.

Пример - запись.

var REG : TRegistry;

begin

REG := TRegistry.Create;

REG.RootKey:=HKEY_LOCAL_MACHINE;
REG.OpenKey('SoftwareTest',true);
REG.WriteBool('Test1',true);
REG.WriteInteger('Test2',12);
REG.CloseKey;
REG.Destroy;
end;

Данный пример создает (если его не было) или открывает ключ реестра HKEY_LOCAL_MACHINESoftwareTest и записывает в него два параметра типа Boolean и Integer.

Источник: www.articles.org.ru

Ссылки по теме
Введение в Delphi 8
Работа с реестром в Delphi
Delphi и ресурсы компьютера
Советы начинающим программировать на Delphi
Структуры и базы данных, методы сортировки
 

Компьютерная документация от А до Я - Главная

 
Популярные книги

Технология программирования на C++. Начальный курс

Подробнее

Photoshop CS2. Настоящий самоучитель

Подробнее

SQL для "чайников", 5-е издание

Подробнее

 

 
Новости ИТ
01.12.2008  Buffalo выпустил миниатюрные USB-накопители
01.12.2008  VENTO TA-U1 - стильный корпус представлен Asus
01.12.2008  Fujitsu-Siemens выпускает в продажу внешний ускоритель для ноутбуков
01.12.2008  Оригинальные чехлы для ноутбуков от Choiix
01.12.2008  Опубликован код драйвера для беспроводных карт Atheros
01.12.2008  Лучший блог 2008
01.12.2008  Linux запустили на Apple iPhone
01.12.2008  LG KC780
01.12.2008  MSI дополнит линейку Wind-нетбуков двумя моделями
01.12.2008  Nikon D3X - 24,5 млн пикселей для профессионалов
01.12.2008  Киловаттник HIPER M1000 с КПД выше 85%
01.12.2008  AMD впервые снизила цены линейки Radeon HD 4800
01.12.2008  Чистильщики: Wise Registry Cleaner v.3.8.2
01.12.2008  Антивирусы: RemoveIT Pro v4 SE (30.11.2008)
01.12.2008  Корпус ASUS Vento TA-U1 можно поставить вместо новогодней ёлки
01.12.2008  Диагностика: PC Wizard 2008 v.1.871
01.12.2008  Диагностика: NextSensor v.2.7.6.0 Build 1130
01.12.2008  Тестовые приложения: PassMark BurnInTest v.6.0 Build 1000 Beta 15
01.12.2008  Неофициальные драйверы для модемов Motorola
01.12.2008  Драйверы и утилиты для сетевых хранилищ D-Link
 
Полезно

 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100