Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Registry durchsuchen (https://www.delphipraxis.net/114125-registry-durchsuchen.html)

Aurelius 20. Mai 2008 07:14


Registry durchsuchen
 
Hi DPler :hi:

Wie einige von euch vielleicht wissen arbeite ich gerade an einem Registry-Editor. Nun stellt sich mir beim Suchalgorithmus die Frage: Soll der komplette Pfad durchsucht werden (HKCU\...\...\Test) oder nur der Name des Schlüssels (Test)? Mich interessiert mal eure Meinung dazu :stupid:

Vielleicht könnt ihr auch gleich eure Meinung dazu schreiben: http://www.delphipraxis.net/internal...185&highlight=

alzaimar 20. Mai 2008 09:35

Re: Registry durchsuchen
 
Nur im Blatt, denn im Pfad hast Du es entweder schon gefunden oder es ist uninteressant (Wenn Du z.B. nur in einem Unterbaum suchen willst).

Aurelius 20. Mai 2008 09:52

Re: Registry durchsuchen
 
Das habe ich mir so auch überlegt, aber in vielen anderen Editoren wird ja der komplette Pfad durchsucht. Außerdem soll der Suchalgorithmus auch reg. Ausdrücke unterstützen...

Phoenix 20. Mai 2008 10:10

Re: Registry durchsuchen
 
Sinnig (und vom User in aller Regel gewünscht) ist: Ab der aktuellen Position rekursiv nach unten durch.
Man wünscht sich aber ggf. eine Option "Alles durchsuchen" zum anhaken, die dann halt oben im Hive anfängt zu suchen.

Aurelius 20. Mai 2008 15:58

Re: Registry durchsuchen
 
das ganze wird schon rekursiv durchsucht. Ich meinte damit ob der gesamte Pfad + Name geprüft werden soll oder nur der eigentl. Name des Schlüssel

bitsetter 20. Mai 2008 18:18

Re: Registry durchsuchen
 
Hi,

ab dem selektierten Item würde ich alles rekursiv durchsuchen. Angenommen das Item "Software" von "Arbeitsplatz\HKEY_CURRENT_USER\Software\Borland\D elphi" ist markiert, dann würde durch die Rekursion auch der Schlüssel "Borland" und "Delphi" mit dem Suchbegriff verglichen werden.

Der Benutzer sollte natürlich noch die Möglichkeit haben, je nach Auswahl die Schlüssel Werte und Daten extra oder auch kombiniert durchsuchen zu können.

Aurelius 21. Mai 2008 17:11

Re: Registry durchsuchen
 
Es wird doch rekursiv durchsucht :D

Beispiel: ich suche nach "Test", es gibt folgenden Schlüssel mit Unterschlüsseln:
HKCU\Software\Test
HKCU\Software\Test\Eins
HKCU\Software\Test\Zwei

Soll es jetzt so sein, dass er
a.) alle 3 "findet", diese also im Gefunden-Fenster angezeigt werden (da ich ja den gesamten Pfad überprüfe)
oder
b.) er nur den 1. Schlüssel auflistet, da dort nur der eigentl. Schlüsselname überprüft wird

Durchsucht werden trotzdem rekursiv alle Schlüssel, keine Frage!

bitsetter 21. Mai 2008 17:45

Re: Registry durchsuchen
 
Na b, 1 mal reicht doch.

alzaimar 25. Mai 2008 20:45

Re: Registry durchsuchen
 
Genau, aber eben anzeigen, das 'Test' ein Unterbaum ist.

Schwedenbitter 10. Feb 2014 14:09

AW: Registry durchsuchen
 
Da ich bislang nirgends im www eine für mich nachvollziehbare Anleitung für das rekursive Duchsuchen der Registry gefunden habe, habe ich mich selbst versucht. Bislang leider ohne Erfolg.

Meine Theorie war die, dass ich ausgehend von den jeweiligen Roots (HKEY_CURRENT_USER etc.) rekursiv nach den Keys mit
Delphi-Quellcode:
TRegistry.GetKeyNames(TStringList);
suche und diese dann wiederum ebenso abklappere. So einfach scheint es aber nicht zu sein. Jedenfalls funktioniert der folgende Code nicht und ich hoffe, mir kann jemand auf die Sprünge helfen, warum das so ist:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

  Procedure GetSubKeys(Const SubKey: String; aReg: TRegistry);
  Var
    lList  : TStringList;
    S      : String;
  Begin
    lList:=TStringList.Create;
    Try
      aReg.OpenKeyReadOnly(SubKey);
      aReg.GetKeyNames(lList);
      While (lList.Count > 0) Do
      Begin
        S:=lList.Strings[0];
        ListBox1.Items.Append(S);
        If (SubKey <> '') Then S:=SubKey + '\' + S;
        GetSubKeys(S, aReg);
        lList.Delete(0);
      End;
    Finally
      lList.Free;
    End;
  End;

Var
  lReg     : TRegistry;
begin
  lReg:=TRegistry.Create(KEY_READ);
  Try
    lReg.RootKey:=HKEY_CURRENT_USER;
    GetSubKeys('', lReg);
  Finally
    lReg.Free;
  End;
end;
Und Entschuldigung, dass ich das Thema wieder aufwecke. Wenn ich was funktionierendes und übersichtliches hinbekomme, kann das evtl. ja auch mal in die CodeLib???

Gruß, Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz