Zugriff auf die Windows-Registrierung
Dieser Artikel stellt eine Reihe von praktischen Funktionen, mit denen es einfach zu lesen und Schreiben von Werten in der Windows-Registrierung.
WAS IST DIE REGISTRIERUNG?
Es ist, wo Windows speichert viele seiner Konfigurationsoptionen und kann auch Anwendungen auf diese Daten zugreifen, sowie ihre eigenen Daten zu speichern.
Wenn Sie die Registrierung ansehen möchten, führen Sie einfach die REGEDIT. EXE-Anwendung, die sich im Windows-Verzeichnis befindet. Achten darauf, nicht etwas zu ändern, oder Sie könnten am Ende ruinieren Ihre Installation!
Nun werden die Daten in der Registrierung in einer Baumstruktur gespeichert. Es gibt viele Wurzeln (viele Bäume):
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA
Jeder Stamm kann Werte und Schlüssel haben. Die Werte sind unter Elementnamen (rechten Bereich des RegEdit) gespeicherten Daten. Schlüssel können Werte und andere Schlüssel, bilden eine Baumstruktur (linke Bereich des RegEdit) haben.
TREGISTRY
Klasse TRegistry wird in der Registry-Unit deklariert, damit musst du diese Einheit hinzufügen der Klausel verwendet das Gerät oder Programm wo Sie es verwenden möchten. Zugriff auf einen Wert in der Registrierung sollte zunächst ein Objekt dieser Klasse zu erstellen, weisen Sie den Stamm seine RootKey-Eigenschaft (die Werte werden in der Unit Windows definiert) und dann versuchen, einen Schlüssel mit OpenKey Funktion Methode, zu öffnen, die im Erfolgsfall True zurückgibt. Dann können Sie (mit den ReadXxxx Funktionen) lesen oder schreiben (mit dem WriteXxxx-Verfahren) die Werte des Schlüssels geöffnet und nach, dass Sie den Schlüssel mit CloseKey schließen sollte.
Wenn Sie die Registrierung abgeschlossen haben, sollten Sie das Registrierungsobjekt frei erstellten.
Mal sehen, ein Beispiel für den Namen des Prozessors in unserem Computer zu erhalten:
uses Registry, Windows, Dialogs;
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Hardware\Description\System'
+ '\CentralProcessor\0', False) then begin
ShowMessage(Reg.ReadString('Identifier'));
Reg.CloseKey;
end; // if
Reg.Free;
end;
Ein weiteres Beispiel im Artikel bestimmen die zugehörige Anwendung finden Sie hier.
Natürlich gibt es viele weitere Dinge, die Sie, mit der Registry tun können, wie erstellen und Löschen von Schlüsseln und Werten...
Die TRegistryIniFile-Klasse macht es einfacher für Anwendungen zu schreiben und ihre Konfigurationsinformationen in und aus der Registrierung zu lesen, während TRegistry auf einem niedrigeren Niveau betreibt.
GETREGISTRYDATA
Zur Vereinfachung der Lesen eines Datenwert in der Registrierung können Sie die folgende Funktion, die können einen beliebigen Datentyp aus der Registrierung lesen und als Variante (String oder Integer) zurückgibt. Die Funktion führt die Ausnahmebehandlung.
uses Registry, Windows, SysUtils;
function GetRegistryData(RootKey: HKEY; Key, Value: string): variant;
var
Reg: TRegistry;
RegDataType: TRegDataType;
DataSize, Len: integer;
s: string;
label cantread;
begin
Reg := nil;
try
Reg := TRegistry.Create(KEY_QUERY_VALUE);
Reg.RootKey := RootKey;
if Reg.OpenKeyReadOnly(Key) then begin
try
RegDataType := Reg.GetDataType(Value);
if (RegDataType = rdString) or
(RegDataType = rdExpandString) then
Result := Reg.ReadString(Value)
else if RegDataType = rdInteger then
Result := Reg.ReadInteger(Value)
else if RegDataType = rdBinary then begin
DataSize := Reg.GetDataSize(Value);
if DataSize = -1 then goto cantread;
SetLength(s, DataSize);
Len := Reg.ReadBinaryData(Value, PChar(s)^, DataSize);
if Len <> DataSize then goto cantread;
Result := s;
end else
cantread:
raise Exception.Create(SysErrorMessage(ERROR_CANTREAD));
except
s := ''; // Deallocates memory if allocated
Reg.CloseKey;
raise;
end;
Reg.CloseKey;
end else
raise Exception.Create(SysErrorMessage(GetLastError));
except
Reg.Free;
raise;
end;
except
Reg.Free;
raise;
end;
BEISPIELAUFRUF
ShowMessage(GetRegistryData(HKEY_LOCAL_MACHINE,
'\Hardware\Description\System\CentralProcessor\0', 'Identifier'));
SETREGISTRYDATA
Zur Vereinfachung schreiben einen Datenwert in der Registrierung können Sie das folgende Verfahren, das einen beliebigen Datentyp in die Registrierung schreiben können.
Die Prozedur führt die Ausnahmebehandlung.
uses Registry, Windows, SysUtils;
procedure SetRegistryData(RootKey: HKEY; Key, Value: string;
RegDataType: TRegDataType; Data: variant);
var
Reg: TRegistry;
s: string;
begin
Reg := nil;
try
Reg := TRegistry.Create(KEY_WRITE);
Reg.RootKey := RootKey;
if Reg.OpenKey(Key, True) then begin
try
if RegDataType = rdUnknown then
RegDataType := Reg.GetDataType(Value);
if RegDataType = rdString then
Reg.WriteString(Value, Data)
else if RegDataType = rdExpandString then
Reg.WriteExpandString(Value, Data)
else if RegDataType = rdInteger then
Reg.WriteInteger(Value, Data)
else if RegDataType = rdBinary then begin
s := Data;
Reg.WriteBinaryData(Value, PChar(s)^, Length(s));
end else
raise Exception.Create(SysErrorMessage(ERROR_CANTWRITE));
except
Reg.CloseKey;
raise;
end;
Reg.CloseKey;
end else
raise Exception.Create(SysErrorMessage(GetLastError));
except
Reg.Free;
raise;
end;
Reg.Free;
end;
BEISPIELAUFRUF
SetRegistryData(HKEY_LOCAL_MACHINE,
'\Software\Microsoft\Windows\CurrentVersion',
'RegisteredOrganization', rdString, 'Latium Software');
Zugriff auf die Windows-Registrierung
Zugriff auf die Windows-Registrierung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Dieser Artikel stellt eine Reihe von praktischen Funktionen, mit denen es einfach zu lesen und Schreiben von Werten in der Windows-Registrierung.
WAS IST DIE REGISTRIERUNG?
Es ist, wo Windows speichert viele seiner Konfigurationsoptionen und kann auch Anwendungen auf diese Daten zugreifen, sowie ihre eigenen Daten zu speichern.
Wenn Sie die Registrierung ansehen möchten, führen Sie einfach die REGEDIT. EXE-Anwendung, die sich im Windows-Verzeichnis befindet. Achten darauf, nicht etwas zu ändern, oder Sie könnten am Ende ruinieren Ihre Installation!
Nun werden die Daten in der Registrierung in einer Baumstruktur gespeichert. Es gibt viele Wurzeln (viele Bäume):
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA
Jeder Stamm kann Werte und Schlüssel haben. Die Werte sind unter Elementnamen (rechten Bereich des RegEdit) gespeicherten Daten. Schlüssel können Werte und andere Schlüssel, bilden eine Baumstruktur (linke Bereich des RegEdit) haben.
TREGISTRY
Klasse TRegistry wird in der Registry-Unit deklariert, damit musst du diese Einheit hinzufügen der Klausel verwendet das Gerät oder Programm wo Sie es verwenden möchten. Zugriff auf einen Wert in der Registrierung sollte zunächst ein Objekt dieser Klasse zu erstellen, weisen Sie den Stamm seine RootKey-Eigenschaft (die Werte werden in der Unit Windows definiert) und dann versuchen, einen Schlüssel mit OpenKey Funktion Methode, zu öffnen, die im Erfolgsfall True zurückgibt. Dann können Sie (mit den ReadXxxx Funktionen) lesen oder schreiben (mit dem WriteXxxx-Verfahren) die Werte des Schlüssels geöffnet und nach, dass Sie den Schlüssel mit CloseKey schließen sollte.
Wenn Sie die Registrierung abgeschlossen haben, sollten Sie das Registrierungsobjekt frei erstellten.
Mal sehen, ein Beispiel für den Namen des Prozessors in unserem Computer zu erhalten:
uses Registry, Windows, Dialogs;
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Hardware\Description\System'
+ '\CentralProcessor\0', False) then begin
ShowMessage(Reg.ReadString('Identifier'));
Reg.CloseKey;
end; // if
Reg.Free;
end;
Ein weiteres Beispiel im Artikel bestimmen die zugehörige Anwendung finden Sie hier.
Natürlich gibt es viele weitere Dinge, die Sie, mit der Registry tun können, wie erstellen und Löschen von Schlüsseln und Werten...
Die TRegistryIniFile-Klasse macht es einfacher für Anwendungen zu schreiben und ihre Konfigurationsinformationen in und aus der Registrierung zu lesen, während TRegistry auf einem niedrigeren Niveau betreibt.
GETREGISTRYDATA
Zur Vereinfachung der Lesen eines Datenwert in der Registrierung können Sie die folgende Funktion, die können einen beliebigen Datentyp aus der Registrierung lesen und als Variante (String oder Integer) zurückgibt. Die Funktion führt die Ausnahmebehandlung.
uses Registry, Windows, SysUtils;
function GetRegistryData(RootKey: HKEY; Key, Value: string): variant;
var
Reg: TRegistry;
RegDataType: TRegDataType;
DataSize, Len: integer;
s: string;
label cantread;
begin
Reg := nil;
try
Reg := TRegistry.Create(KEY_QUERY_VALUE);
Reg.RootKey := RootKey;
if Reg.OpenKeyReadOnly(Key) then begin
try
RegDataType := Reg.GetDataType(Value);
if (RegDataType = rdString) or
(RegDataType = rdExpandString) then
Result := Reg.ReadString(Value)
else if RegDataType = rdInteger then
Result := Reg.ReadInteger(Value)
else if RegDataType = rdBinary then begin
DataSize := Reg.GetDataSize(Value);
if DataSize = -1 then goto cantread;
SetLength(s, DataSize);
Len := Reg.ReadBinaryData(Value, PChar(s)^, DataSize);
if Len <> DataSize then goto cantread;
Result := s;
end else
cantread:
raise Exception.Create(SysErrorMessage(ERROR_CANTREAD));
except
s := ''; // Deallocates memory if allocated
Reg.CloseKey;
raise;
end;
Reg.CloseKey;
end else
raise Exception.Create(SysErrorMessage(GetLastError));
except
Reg.Free;
raise;
end;
except
Reg.Free;
raise;
end;
BEISPIELAUFRUF
ShowMessage(GetRegistryData(HKEY_LOCAL_MACHINE,
'\Hardware\Description\System\CentralProcessor\0', 'Identifier'));
SETREGISTRYDATA
Zur Vereinfachung schreiben einen Datenwert in der Registrierung können Sie das folgende Verfahren, das einen beliebigen Datentyp in die Registrierung schreiben können.
Die Prozedur führt die Ausnahmebehandlung.
uses Registry, Windows, SysUtils;
procedure SetRegistryData(RootKey: HKEY; Key, Value: string;
RegDataType: TRegDataType; Data: variant);
var
Reg: TRegistry;
s: string;
begin
Reg := nil;
try
Reg := TRegistry.Create(KEY_WRITE);
Reg.RootKey := RootKey;
if Reg.OpenKey(Key, True) then begin
try
if RegDataType = rdUnknown then
RegDataType := Reg.GetDataType(Value);
if RegDataType = rdString then
Reg.WriteString(Value, Data)
else if RegDataType = rdExpandString then
Reg.WriteExpandString(Value, Data)
else if RegDataType = rdInteger then
Reg.WriteInteger(Value, Data)
else if RegDataType = rdBinary then begin
s := Data;
Reg.WriteBinaryData(Value, PChar(s)^, Length(s));
end else
raise Exception.Create(SysErrorMessage(ERROR_CANTWRITE));
except
Reg.CloseKey;
raise;
end;
Reg.CloseKey;
end else
raise Exception.Create(SysErrorMessage(GetLastError));
except
Reg.Free;
raise;
end;
Reg.Free;
end;
BEISPIELAUFRUF
SetRegistryData(HKEY_LOCAL_MACHINE,
'\Software\Microsoft\Windows\CurrentVersion',
'RegisteredOrganization', rdString, 'Latium Software');
Zugriff auf die Windows-Registrierung
By Wiezutun
Zugriff auf die Windows-Registrierung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.