Adgang til Windows-registreringsdatabasen

Denne artikel introducerer nogle nyttige funktioner, der gør det let at læse og skrive værdier i Windows registreringsdatabasen.

HVAD ER i registreringsdatabasen?

Det er, hvor Windows gemmer mange af sine indstillingsmuligheder og også tillader programmer at få adgang til disse data, samt gemme deres egne data.

Hvis du ønsker at tage et kig på registreringsdatabasen, bare udføre REGEDIT.EXE, der findes i Windows-mappen. Pas på ikke at ændre noget, eller du kan ende med at ødelægge din installation!

Nu dataene i registret er lagret i en træstruktur. Der er mange rødder (mange træer):

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

HKEY_PERFORMANCE_DATA

HKEY_CURRENT_CONFIG

HKEY_DYN_DATA

Hver rod kan have værdier og nøgler. Værdierne er data gemt under item navne (højre panel i RegEdit). Nøgler kan have værdier og andre taster, der udgør en træstruktur (venstre panel af RegEdit).

TREGISTRY

Den TRegistry klassen er erklæret i registreringsdatabasen enhed, så du bliver nødt til at tilføje denne enhed til formål klausulen af ​​enheden eller program, hvis du ønsker at bruge den. For at få adgang en værdi i registreringsdatabasen først skal du oprette et objekt af denne klasse, tildele roden til sin RootKey ejendom (værdierne er defineret i Windows-enhed) og derefter forsøger at åbne en nøgle med OpenKey funktion metode, som vil vende tilbage True, hvis succes. Derefter kan du læse (med ReadXxxx funktioner) eller skrive (med WriteXxxx procedurer) værdierne af den åbne nøgle og efter det, bør du lukke nøgle med CloseKey.

Når du er færdig med registreringsdatabasen, skal du frigøre registreringsdatabasen objekt, du har oprettet.

Lad os se et eksempel på, hvordan du kan få navnet på processoren i vores computer:

uses Registry, Windows, Dialogs;

procedure TForm1.Button1Click (Sender: TObject);

Var

Reg: TRegistry;

begynde

Reg: = TRegistry.Create;

Reg.RootKey: = HKEY_LOCAL_MACHINE;

hvis Reg.OpenKey ('\ Hardware \ Beskrivelse \ System'

+ '\ CentralProcessor «, falsk) derefter begynde

ShowMessage (Reg.ReadString (»Identifier));

Reg.CloseKey;

ende; // Hvis

Reg.Free;

ende;

Du kan se et eksempel i artiklen Bestemmelse det tilknyttede program.

Selvfølgelig er der mange flere ting, du kan gøre med registreringsdatabasen, som at skabe og sletning nøgler og værdier ...

Den TRegistryIniFile klassen gør det enklere for ansøgninger til at skrive og læse deres konfiguration information til og fra registreringsdatabasen, mens TRegistry opererer på et lavere niveau.

GETREGISTRYDATA

For at forenkle læse en dataværdi fra registreringsdatabasen, kan du bruge følgende funktion, der kan læse enhver datatype fra registreringsdatabasen og returnerer det som en variant (streng eller heltal). Funktionen udfører exception handling.

uses Registry, Windows, SysUtils;

fungere GetRegistryData (RootKey: HKEY; Key, Værdi: string): variant;

Var

Reg: TRegistry;

RegDataType: TRegDataType;

DataSize, Len: heltal;

s: string;

label cantread;

begynde

Reg: = intet;

prøve

Reg: = TRegistry.Create (KEY_QUERY_VALUE);

Reg.RootKey: = RootKey;

hvis Reg.OpenKeyReadOnly (Key) derefter begynde

prøve

RegDataType: = Reg.GetDataType (værdi);

Hvis (RegDataType = rdString) eller

(RegDataType = rdExpandString), så

Resultat: = Reg.ReadString (værdi)

ellers hvis RegDataType = rdInteger derefter

Resultat: = Reg.ReadInteger (værdi)

ellers hvis RegDataType = rdBinary derefter begynde

DataSize: = Reg.GetDataSize (værdi);

hvis DataSize = -1 derefter goto cantread;

SetLength (s, DataSize);

Len: = Reg.ReadBinaryData (værdi, PChar (r) ^, DataSize);

hvis Len <> DataSize derefter goto cantread;

Resultat: = s;

ende ellers

cantread:

hæve Exception.Create (SysErrorMessage (ERROR_CANTREAD));

undtagen

s: = ''; // Deallocates hukommelse, hvis allokeret

Reg.CloseKey;

hæve;

ende;

Reg.CloseKey;

ende ellers

hæve Exception.Create (SysErrorMessage (GetLastError));

undtagen

Reg.Free;

hæve;

ende;

undtagen

Reg.Free;

hæve;

ende;

SAMPLE CALL

ShowMessage(GetRegistryData(HKEY_LOCAL_MACHINE,

»\ Hardware \ Beskrivelse \ System \ CentralProcessor ',' Identifier"));

SETREGISTRYDATA

For at forenkle skrive en dataværdi til registreringsdatabasen, kan du bruge følgende procedure, der kan skrive enhver datatype til registreringsdatabasen.

Proceduren udfører exception handling.

uses Registry, Windows, SysUtils;

procedure SetRegistryData (RootKey: HKEY; Key, Værdi: string;

RegDataType: TRegDataType; Data: variant);

Var

Reg: TRegistry;

s: string;

begynde

Reg: = intet;

prøve

Reg: = TRegistry.Create (KEY_WRITE);

Reg.RootKey: = RootKey;

hvis Reg.OpenKey (Key, sand) så begynde

prøve

hvis RegDataType = rdUnknown derefter

RegDataType: = Reg.GetDataType (værdi);

hvis RegDataType = rdString derefter

Reg.WriteString (Value, Data)

ellers hvis RegDataType = rdExpandString derefter

Reg.WriteExpandString (Value, Data)

ellers hvis RegDataType = rdInteger derefter

Reg.WriteInteger (Value, Data)

ellers hvis RegDataType = rdBinary derefter begynde

s: = data;

Reg.WriteBinaryData (værdi, PChar (r) ^, Længde (e));

ende ellers

hæve Exception.Create (SysErrorMessage (ERROR_CANTWRITE));

undtagen

Reg.CloseKey;

hæve;

ende;

Reg.CloseKey;

ende ellers

hæve Exception.Create (SysErrorMessage (GetLastError));

undtagen

Reg.Free;

hæve;

ende;

Reg.Free;

ende;

SAMPLE CALL

SetRegistryData(HKEY_LOCAL_MACHINE,

»\ Software \ Microsoft \ Windows \ CurrentVersion",

»RegisteredOrganization«, rdString, 'Latium Software');