AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Regestry durchscannen

Ein Thema von gsh · begonnen am 16. Dez 2004 · letzter Beitrag vom 1. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Regestry durchscannen

  Alt 16. Dez 2004, 20:48
Hi DPler

Ich wollte mal die Regestry durchscannen und alle Schlüssel mit Value auslesen und in eine Datei schreiben. Mit allen HKEY ist des auch wundervoll gegangen nur nicht mit HKEY_LOCAL_MASCHINE. Ich glaube weil in dem HKEY zu viele Werte stehen und ich auf meine Variante einen Stack überlauf bekomme:

Code:
procedure TForm1.Search_Reg(Root : HKEY; Dir : String; var Liste : TStringList);
var
  reg : TRegistry;
  List, List2 : TStringList;
  I, I2 : Integer;
begin
  Application.ProcessMessages;
  sleep(0);
  Reg := TRegistry.Create;
  try
    reg.RootKey := Root;
    if reg.OpenKey(Dir, false) = false then exit;
    List := TStringList.Create;
    List2 := TStringList.Create;
    reg.GetKeyNames(List);
    reg.GetValueNames(List2);
    for I := 0 to List.Count-1 do
    begin
      Liste.Add(Dir+'\'+List[I]);
      for I2 := 0 to List2.Count-1 do
      begin
        Liste.Add(Dir+'\'+List[I]+'\'+List2[I2]{+'='+reg.ReadString(List[I2])});
      end;
      Search_Reg(Root, Dir+'\'+List[I], Liste);
    end;
  finally
    reg.Free;
  end;
end;
Es ist mir klar des es nicht die schönste Variante mit den ganzen fors ist aber ich wüsste ich nicht wie ich es anders machen könnte.

Vieleicht könntet ihr mir auch ein stückchen Code preisgeben.


gsh

[edit=Christian Seehase]Pushen erst nach 24 Stunden Mfg, Christian Seehase[/edit]
Alex
  Mit Zitat antworten Zitat
17. Dez 2004, 00:20
Dieses Thema wurde von "Christian Seehase" von "Windows 9x / ME / 2000 / XP / 2003" nach "Windows API" verschoben.
Es ist ein Programmierproblem
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#3

Re: Regestry durchscannen

  Alt 17. Dez 2004, 22:28
Hat den keiner eine Idee ?
Alex
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: Regestry durchscannen

  Alt 26. Dez 2004, 15:45
Von welchem Betriebssystem reden wir denn?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Regestry durchscannen

  Alt 26. Dez 2004, 15:47
Hi!

Welcher Fehler kam denn bei deinem Versuch? Und an welcher Stelle des Codes?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#6

Re: Regestry durchscannen

  Alt 28. Dez 2004, 20:01
@Assarbad : Win XP SP2

@fkerber : Das Problem ist mit den vielen for schleifen den die Function ruft sich selber wieder auf (um die unterverzeichnisse zu erstellen). Bei for schleifen merkt sich das betriebsystem dir rücksprungadresse im Stack und deshalb bekomme ich einen Stack-Überlauf.

PS: Wenn ich die Function nicht wieder selber aufrufen lasse dann geht alles nur hat er dann keine unterverzeichnisse.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: Regestry durchscannen

  Alt 29. Dez 2004, 00:22
Code:
  reg : TRegistry;
  List, List2 : TStringList;
Jede Instanz der Funktion hat ein eigenes Registry-Objekt, hat zwei eigene Stringlists, sorry, da wunderst du dich? Sowas sollte man als Parameter übergeben um den Stackframe klein zu halten.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#8

Re: Regestry durchscannen

  Alt 29. Dez 2004, 08:18
Ich würde es auf eine Iterative Funktion umbauen, ist auch garnicht weiter wild.

1. Du erstellst eine StringListe in der alle zu verarbeitenden Schlüssel abgelegt werden.
2. Du fügst der Liste den Root Pfad (vermutlich '/' oder '' hinzu)
3. Du nimmst den ersten Schlüssel aus der Stringliste und öffnest diesen
4. Du ermittelst alle direkten Unterschlüssel. Diese fügst du ans Ende der Stringliste ein. Natürlich mit Kompletten Pfad (also '/Software/Microsoft' ... usw).
5. Zu dem geöffneten Schlüssel gibts du die ganzen Values aus.
6. Du löschst den ersten Eintrag aus der Stringliste.
7. Du springst zurück zu Punkt 3 und machst das solange, bis kein Schlüssel mehr in der Stringliste steht.

Wenn man etwas Hierachie in die Ausgabedatei bringen möchte kannst du bei Punkt 4 den neuen Schlüssel auch nach dem Ersten Eintrag einfügen. Dann wird der neue Schlüssel nach dem aktuellen abgearbeitet.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Regestry durchscannen

  Alt 29. Dez 2004, 08:35
Hoi

Zitat von Assarbad:
Jede Instanz der Funktion hat ein eigenes Registry-Objekt, hat zwei eigene Stringlists, sorry, da wunderst du dich? Sowas sollte man als Parameter übergeben um den Stackframe klein zu halten.
Ich dachte, Objekte werden nicht auf dem Stack erstellt?

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#10

Re: Regestry durchscannen

  Alt 29. Dez 2004, 10:48
Gut, Objekte selber nicht (nur die Objektpointer liegen aufm Stack). Aber es reicht für eine außerordentliche Belastung des Speichers. IMO sollte er erstmal dahingehend etwas korrigieren.

Wenn's dann immer noch nicht geht, kann man noch weiter gehen. Außerdem wäre eine solche Funktion bei mir keine Methode. So muß nämlich auch noch der Self-Pointer mitgeschleppt werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
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