Регистратор – это центральное хранилище информации о параметрах системы и установленных программах.
Microsoft рекомендует в секции HKEY_CURRENT_USER и подсекции Software. В этой подсекции вы создаете подсекцию, идентифицирующую вашу программу или фирму, и уже внутри ее располагаете данные. Модуль RegistryРегистратор представляет собой иерархическую базу данных, состоящую из секций, подсекций и элементов. Каждая секция имеет свое назначение. Хранить данные о пользовательских программах
Для упрощения работы с регистратором в составе
Delphi имеется модуль REGISTRY, содержащий реализацию двух классов — TRegistry и TRegIniFile. Собственно говоря, задача класса TRegIniFile — упростить перенос 16-битных программ в среду Windows. Методы этого класса эквивалентны методам класса TIniFile в 16-битной версии Delphi. Класс TRegIniFile позволяет обращаться к секции HKEY_CURRENT_USER, считывать и записывать строки (методы ReadString и WriteString), целочисленные значения (методы Readinteger и Writeinteger), логические значения (методы ReadBool и WriteBool), секции (методы ReadSection, ReadSections и ReadSectionValues), удалять секции (метод EraseSection) и элементы (метод DeleteKey).Рассмотрим на примерах, как используются функции этого класса.
Microsoft
рекомендует записывать данные, относящиеся к вашей программе, в подсекции секции HKEY_CURRENT_USER_Software. Предположим, что ваша программа называется RegDemo и данные для нее располагаются в секции Software\RegDemo. Ниже мы покажем, как поместить в регистратор строчные, целочисленные, логические дaнныe, a затем считать их — этих операций достаточно для того, чтобы сохранить в регистраторе параметры нашей программы, а затем считать их.Прежде, чем записать данные в определенную секцию, необходимо создать саму секцию. Это происходит при вызове конструктора объекта
TRegIniFife, В качестве параметрa вы указываете название секции, и если таковой не существует, она создается:RegFile:= TregIniFile.Create(SubKey);
После того, как файл регистратора открыт (и создана определенная секция), мы можем записать данные. Поддерживаются три типа данных: целочисленные, логические и строчные данные. Для записи этих данных существуют методы
Writeinteger, WriteBool и WriteString. В качестве параметров указываются:•
название подсекции;•
название элемента;•
данные.Так, чтобы записать значение элемента
Int_Val в подсекции Int_Кеу, следует выполнить код:RegFile.WriteInteger(IntKey, ‘Int_Val’, 32000);
а для того, чтобы прочесть значение, необходимо вызвать метод
Readinteger (в качестве параметров указываются название подсекции, название элемента и значение по умолчанию):Edlt2.Text := IntToStr(RegFlle.ReadInteger(IntKey, 'Int.Val', 0));
Для чтения логических и строчных данных используются соответственно методы
ReadBool и ReadStr.Пример использования класса
TregFile для доступа к регистратору. Используется подсекция секции HKEY_CURRENT_USER_Software.unit RegUnit;
interface
uses Windws, Messages, SysUtils, Classes, Graphics, Controlsi, Forms, Dialogs, Registry, StdCtrls;
type
Tform1 = class(Tform)
Button1: Tbutton;
Edit2: TEdit;
Edit3: Tedit;
Labell: TLabel;
Label2: TLabel;
Button4: TButton;
CheckBoxl: TcheckBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: Tobject; var Action:
TCloseActlon);
р
rocedure Button4Cllck(Sender: TObject);procedure Button2Cllck(Sender: TObject);
.private
{ Private declarations}
public
{Public declarations}
end;
Const
{
подсекция}SubKey: String = ‘Software\RegDemo’;
{
Элемент для хранения логических данных}BoolKey: String = ‘Bool_Key’;
{
Элемент для хранения целочисленных данных}IntKey : String = 'Int_Key';
{
Элемент для хранения строчных данных}StrKey: String = 'Str_Key';
var
Forml : Tform1;
RegFile: TRegIniFile;
implementation
{$R *.DFM}
procedure Tform1.Button1Click(Sender: Tobject);
begin
CheckBox1.Checked:= RegFile.ReadBool(BoolKey, ‘Bool_Val’,
False);
Edit2.Text:= IntToStr(RegFile, ReadInteger(IntKey,’Int_Val’,0));
Edit3.Text:= RegFile.ReadString(StrKey,’Str_Val’,’’);
end;
{
Открыть регистратор. Если указанная секция не существует, она создается}procedure Tform1.FormCreate(Sender:Tobject);
begin
RegFile:=TregIniFile.Create(SubKey);
end;
{
Закрыть регистратор}procedure Tform1.FormClose(Sender:Tobject);
begin
RegFile.Free;
end;
{
Записать данные}procedure Tform1.Button4Click(Sender:Tobject);
begin
RegFile.WriteBool(BoolKey,’Bool_Val’,CheckBox1.Checked);
RegFile.WriteInteger(IntKey, ‘Int_Val’,StrToInt(Edit2.Text));
RegFile.WriteString(StrKey, ‘Str_Val’,Edit3.Text));
end;
end.
Использование программы REGEDIT Если вам необходимо занести какие-то значения в регистратор или просто создать пустую подсекцию – такие функции, например, могут быть возложены на программу уствновки, то можно воспользоваться программой REGEDIT. Для этого необходимо создать специальный текстовый файл и указать его в качестве параметра при вызове программы REGEDIT. Этот файл может выглядеть для нашего примера (создание подсекции) следующим образом:REGEDIT4
{HKEY_CURRENT_USER\Software\RegDemo}
Ниже показана подпрограмма, которая создает данный файл и вызывает
REGEDIT для обновления содержимого регистратораProcedure Tform1.RegUpdate;
Const
RegID: String = ‘REGEDIT4’+#13#10;
RegPath: String= ‘[HKEY_LOCAL_MACHINE\SOFTWARE\’;
Var
RegFile: TfileStream;
RegItem: String;
RegCmd: String;
P:Pchar;
RegWnd: hWnd;
Begin
{
Создать регистрационный файл}RegFile:= TfileStream.Create(‘REGDEMO.REG’,fmCreate);
RegItem:= RegPath+ ‘RegDemo]’+#13#10;
RegFile.Write(RegID[1], Length(RegID));
RegFile.Write(RegItem[1], Length(RegItem));
RegFile.Free;
{
Вызвать REGEDIT и обновить регистратор}RegCmd:= ‘REGEDIT /s’ +’REGDEMO.REG’;
StrPCopy(P,RegCmd);
WinExec(P,SW_MINIMIZE);
{
завершающие действия}If FileExists(‘REGDEMO.REG’) Then
DeleteFile(‘REGDEMO.REG’);
End;
В заключение следует отметить, что рассмотренных выше функций вполне достаточно для того, чтобы обеспечить минимальную функциональность приложения. Если же вам требуется читать и записывать данные из других секций регистратора, вы можете воспользоваться методами класса
Tregistry (см. исходный текст модуля REGISTRY) или непосредственно функциями Win32API.