Всё о Зачарованных - The Charmed Only

Использование регистратора

Регистратор – это центральное хранилище информации о параметрах системы и установленных программах.

Регистратор представляет собой иерархическую базу данных, состоящую из секций, подсекций и элементов. Каждая секция имеет свое назначение. Хранить данные о пользовательских программах 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.

Hosted by uCoz