Einzelnen Beitrag anzeigen

Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 10. Jun 2002, 14:50
Hoi das hab ich aus dem EDH, allerdings ist das nicht direkt mit der WinAPI:
Zitat:
Mit der Registry arbeiten


Was ist die Registry?

Die Registry ist die zentrale Datenbank eines Windows-Betriebssystems

In der Registry werden die meisten Einstellungen und Informationen des Betriebssystems gespeichert. Dazu gehören unter anderem der Dateiname des Hintergrundbildes, Informationen über installierte Software und vieles mehr. Diese Werte/Informationen lassen sich ohne große Umstände aus der Datenbank auslesen und abändern.

ACHTUNG! Beachte, dass durch die Manipulation der Registry tief ins System eingegriffen wird. Lege zuvor ein Backup Deiner persönlichen Dateien an, um Datenverlust vorzubeugen.


Eine Instanz des Objektes erstellen

Delphi kapselt den Registryzugriff in einem Objekt namens TRegistry. Es befindet sich in der Unit Registry, welche Du der uses-Klausel hinzufügen musst. Bevor Du mit diesem Objekt arbeiten kannst, musst Du es deklarieren und eine Instanz davon erstellen:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  Registry: TRegistry;
begin
  with TRegistry.Create do
Die Registrierungsdatenbank hat einen hierarchischen Aufbau. Am Anfang dieser Hierarchie stehen mehrere Hauptschlüssel, die wiederum weitere Unterschlüssel enthalten. Alle Schlüssel die Deine Anwendung erzeugt, öffnet oder liest sind Unterschlüssel von diesen vordefinierten Hauptschlüsseln. Die Eigenschaft Rootkey definiert diesen Hauptschlüssel für das TRegistry-Objekt. Standardgemäß wird die Eigenschaft Rootkey bei der Erzeugung des Objekts auf den Wert HKEY_CURRENT_USER gesetzt.

Mögliche Werte von Rootkey:
Code:
 
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA

Bevor Du jetzt einen Schlüssel erzeugst oder einen Wert aus einem Schlüssel lesen kannst, muss dieser geöffnet werden. Dies geschieht mit dem Aufruf von Openkey:
Code:
function OpenKey(const Key: string;
  CanCreate: Boolean): Boolean;
Die Funktion erwartet zwei Parameter: Erstens den Schlüssel, welcher geöffnet werden soll (immer relativ von bisher geöffneten Schlüsseln) und zweitens einen booleschen Parameter, welcher steuert, ob ein Schlüssel, wenn er noch nicht existiert erstellt werden soll (True) oder nicht (False). Jeder weitere Aufruf von Openkey öffnet den Schlüssel relativ vom bisher geöffnetem Schlüssel. Bevor man also einen anderen Schlüssel öffnen möchte ist der Aufruf CloseKey; notwendig.



Lesen/Schreiben von Werten

Das Objekt ist jetzt bereit in die Registry Werte zu schreiben und auch aus dieser zu lesen. Dies geschieht mit der Methode WriteString bzw. mit ReadString. Die beiden Parameter, die WriteString erwartet, müssen Sie mit Angaben zum Namen (Typ String) und zum Wert (auch vom Typ String), welcher gespeichert werden soll, füllen. Ist der Name bereits vorhanden, wird dieser überschrieben.

ReadString erwartet nur einen Parameter, nämlich den Namen des zu lesenden Werts. Als Result wird der Wert mit diesem Namen zurückgegeben. Man hat auch die Möglichkeit direkt einen Integer-Wert, einen booleschen Wert oder eine Gleitkommazahl in die Registry zu schreiben/lesen. Für diese Aufgabe gibt es die Methoden WriteInteger, WriteBool und WriteFloat, bzw. ReadInteger, ReadBool und ReadFloat. Die Parameter sind bei diesen Methoden identisch mit Ihren Verwandten WriteString und ReadString. Natürlich muss der übergebene Wert bzw. der Rückgabewert vom entsprechenden Typ sein.

Da für das Objekt Speicher reserviert wurde, muss dieser mit Free wieder freigegeben werden.


Beispiel

Es folgt jetzt ein Beispiel, welches einen String (Edit1.Text) und einen Integer (SpinEdit1.Value) in den Schlüssel "HKEY_CURRENT_USER\Software\TestFirma\TestProd ukt" schreibt. Zur Sicherheit kommt das ganze in einen try-finally-Block.
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TRegistry.Create do
  begin
    try
      Rootkey:=HKEY_CURRENT_USER; //Hauptschlüssel
      OpenKey('Software\TestFirma\TestProdukt',True); //Unterschlüssel öffnen
      WriteString('TestString',Edit1.Text);
      WriteInteger('TestInteger',SpinEdit1.Value);
    finally
      Free;
    end;
  end;
end;
Tipp: Sollte der Eintrag nicht sofort in RegEdit erscheinen, einfach mal F5 drücken.

Das Lesen der Werte aus der Registry ist nicht viel schwieriger. Der Wert "TestString" wird in das Edit-Feld eingelesen und die Integer-Zahl "TestInteger" wird SpinEdit1 übergeben. Zur Speichersicherheit wird das ganze in einem try-finally-Block gekapselt.
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  with TRegistry.Create do
  begin
    try
      Rootkey:=HKEY_CURRENT_USER;
      OpenKey('Software\TestFirma\TestProdukt',True);
      Edit1.Text:=ReadString('TestString');
      SpinEdit1.Value:=ReadInteger('TestInteger');
    finally
      Free;
    end;
  end;
end;

Weitere Befehle des Objekts TRegistry

TRegistry bietet noch viele weitere Möglichkeiten, die Registry zu bearbeiten.


Einen Wert löschen (im aktuell geöffnetem Schlüssel):
Code:
DeleteValue('NameDesWertes');
Einen Schlüssel löschen (im aktuell geöffneten Hauptschlüssel - Rootkey):
Code:
DeleteKey('Software\TestFirma\TestProdukt');
Testen, ob ein Schlüssel (relativ vom geöffnetem Schlüssel) oder ein Wert existiert:
Code:
Checkbox1.Checked:=KeyExists('TestProdukt');
Checkbox2.Checked:=ValueExists('TestString');
Weitere Befehle findest Du in der OH unter dem Stichwort "TRegistry". Es ist auch ein sehr ausfürhliches Beispiel dabei. Die Erklärungen sind größtenteils verständlich.
SORRY das ich einfach den ganzen Text poste
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat