Работа с реестром

Системный реестр Windows - это централизованная система хранения данных об операционной системе и установленного в ней программного обеспечения. В целом принцип работы с системным реестром похож на работу с файлами инициализации. Реестр состоит из 5 основных разделов, которые еще называют ульями (Hive). Имя кажого улья начинается с буквы "H", что означает HiveKEY. Каждый улей состоит из неограниченного числа ключей. В свою очередь каждый ключ состоит из неограниченного числа подключей, которые содержат некоторый параметр (значение). Для "ручной" работы с реестром существует Редактор Реестра, который запускается командой RegEdit в меню кнопки "Пуск" - "Выполнить".

В Delphi для работы с реестром существует класс TRegistry. Для этого нужно в разделе Uses проекта описать модуль Registry. Далее нужно создать экземпляр класса при помощи метода Create. Для указания текущего улья используется свойство RootKey. По умолчанию это свойство установлено в HKEY_CURRENT_USER. Так как данное свойство не является строковым типом, то при указании имени улья его не нужно обрамлять в апострофы или кавычки.

...
Uses Registry;
...

procedure TForm1.FormCreate(Sender: TObject);
Var Reestr: TRegistry;
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CLASSES_ROOT;
 Reestr.Free;
end;

Все операции с текущим ключом выполняются, только если он является открытым. Для того чтобы открыть ключ существует метод OpenKey(const Key: String; CanCreate: Boolean). Если указанный ключ существует, то он становиться активным, иначе учитывается значения свойства CanCreate. Если оно установлено в True, то указанный ключ создается заново и становиться активным.

Для того чтобы узнать текущий ключ, с которым происходит работа в данный момент, используется свойство CurrentKey. А при помощи свойства CurrentPath можно узнать полный путь к текущему ключу.

После завершения работы с ключом его следует закрыть. Для этого служит метод CloseKey. Если в качестве параметра указать не существующий ключ, то этот метод будет просто игнорирован.

procedure TForm1.btnReestrCurrentClick(Sender: TObject);
Var Reestr: TRegistry;
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\Borland\Delphi\6.0', False) 
   Then ShowMessage(Reestr.CurrentPath);
 Reestr.CloseKey;
 Reestr.Free;
end;

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

procedure TForm1.btnReestrReadClick(Sender: TObject);
Var Reestr: TRegistry;
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\MyProg\', False) Then
   Begin
     ShowMessage(Reestr.ReadString('Parametr'));
     ShowMessage(DateToStr(Reestr.ReadDateTime('Parametr1')));   
     Reestr.CloseKey;
   End;
 Reestr.Free;
end;

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

procedure TForm1.btnReestrWriteClick(Sender: TObject);
Var Reestr: TRegistry;
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\MyProg\', False) Then
   Begin
     Reestr.WriteString('Parametr', 'Значение параметра');
     Reestr.WriteDateTime('Parametr1', Now);   
     Reestr.CloseKey;
   End;
 Reestr.Free;
end;

Для создания нового ключа используется метод CreateKey. Если указать имя уже существующего ключа, то метод будет игнорирован. Для проверки существования ключа служит метод KeyExist.

procedure TForm1.btnReestrCreateClick(Sender: TObject);
Var Reestr: TRegistry;
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\MyProg\', False) Then
   Begin
     If Reestr.KeyExists('NewKey') Then ShowMessage('Ключ существует !')
       Else Reestr.CreateKey('NewKey');
     Reestr.CloseKey;
   End;
 Reestr.Free;
end;

Для удаления ключа используется метод DeleteKey логического типа. В результате выполнения данного метода, указанный ключ будет удален со всеми его подключами и параметрами.

procedure TForm1.btnReestrDeleteClick(Sender: TObject);
Var Reestr: TRegistry;
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\MyProg\', False) Then
   Begin
     If Reestr.KeyExists('NewKey') Then Reestr.DeleteKey('NewKey');
     Reestr.CloseKey;
   End;
 Reestr.Free;
end;

Ну, и на последок разберем традиционный пример для сохранения и последующего восстановления параметров формы. Для этого объявим одну глобальную переменную для работы с реестром. В обработчик удаления формы внесем код для сохранения параметров формы, а в обработчик создания формы внесем код для считывания сохраненных параметров формы.

...
Var Reestr: TRegistry;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
 Reestr:=TRegistry.Create;
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\MyProg\NewKey', False) Then
   Begin
     Form1.Top:=Reestr.ReadInteger('Top');
     Form1.Left:=Reestr.ReadInteger('Left');
     Form1.Height:=Reestr.ReadInteger('Height');
     Form1.Width:=Reestr.ReadInteger('Width');
     Reestr.CloseKey;
   End;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Reestr.RootKey:=HKEY_CURRENT_USER;
 If Reestr.OpenKey('\SoftWare\MyProg\NewKey', False) Then
   Begin
     Reestr.WriteInteger('Top', Form1.Top);
     Reestr.WriteInteger('Left', Form1.Left);
     Reestr.WriteInteger('Height', Form1.Height);
     Reestr.WriteInteger('Width', Form1.Width);
     Reestr.CloseKey;
   End;
 Reestr.Free;
end;

Вернуться в оглавление
Вернуться на главную страницу
Hosted by uCoz