Hallo,
Zitat:
Denn wenn die Procedure rekursiv aufgerufen und Rootkey:=hkey;
gesetzt wurde, wäre nach meinem Verständnis der aktuelle (Unter)Schlüssel geöffnet
Nö. Das Setzen der Eigenschaft RootKey bestimmt nur den Hauptschlüssel unter dem gelesen/geschrieben werden soll, also HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER etc. - mehr nicht. Die gewünschten Unterschlüssel musst Du schon noch mit
OpenKey
oder
OpenKeyReadOnly
entsprechend öffnen (vollständige "Pfadangabe"!).
Wenn Du einen Unterschlüssel öffnest, kannst Du bis zum nächsten
CloseKey
(sinnvoll) auf
CurrentPath
zugreifen - nach einem
CloseKey
steht dann aber nix mehr zur Verfügung.
Versuch es doch mal so:
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
SearchString : string;
procedure EnumAllKeys (const Root : HKEY; const Key : string);
var
r : TRegistry;
l : TStringList;
i : Integer;
s : string;
begin
r := TRegistry.Create;
try
r.RootKey := Root;
if r.OpenKeyReadOnly (Key) then
begin
l := TStringList.Create;
r.GetKeyNames (l);
for i := 0 to l.Count - 1 do
begin
s := l [i];
if Pos (SearchString, UpperCase (s)) > 0 then
ListBox1.Items.Add (r.CurrentPath + '\' + s);
EnumAllKeys (Root, r.CurrentPath + '\' + s)
end;
r.CloseKey
end;
finally
FreeAndNil (r);
FreeAndNil (l)
end
end;
begin
SearchString := 'PRINT';
EnumAllKeys (HKEY_CURRENT_CONFIG, '')
end;
Gruß