AGB  ·  Datenschutz  ·  Impressum  







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

(TRegistry) Sinn von CurrentKey

Ein Thema von Caps · begonnen am 20. Jun 2013 · letzter Beitrag vom 12. Feb 2014
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

AW: (TRegistry) Sinn von CurrentKey

  Alt 20. Jun 2013, 16:26
Also wenn es ein HKEY (ein Handle) ist, ist weniger verwunderlich, dass unterschiedliche Zahlen beim auf-, zu- und wieder aufmachen rauskommen, oder?
Ja, aber nur in Bezug auf die Unterschlüssel des Root-Schlüssels, denn bei dem muss das Handle ja immer gleich sein, damit die fest definierten Konstanten (HKEY_...) passen. Also ist der Wert von CurrentKey nur im Spezialfall "ich öffne Root-Schlüssel" festgelegt und sinnvoll verwendbar, in allen anderen Fällen (der überragenden Mehrzahl) nutzlos. Und im Falle "ich öffne Root-Schlüssel" sagt mir die Eigenschaft RootKey bereits alles was ich wissen will. Den Rest erfahre ich dann über CurrentPath. CurrentKey ist in meinen Augen überflüssig.
Das soll einer verstehen... ich geh jetzt heim.
Schönen Abend!

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps (20. Jun 2013 um 16:28 Uhr)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: (TRegistry) Sinn von CurrentKey

  Alt 21. Jun 2013, 07:58
Immer diese pauschalen Aussagen... nutzlos für Dich vielleicht. Aber es gibt noch eine Reg*-API-Aufrufe, die nicht in TRegistry gekapselt sind, und wenn man die haben möchte, braucht man ein Handle eines geöffneten Schlüssels. Auch die implementierten Aufrufe sind nicht vollständig, vielleicht will man mal andere als die drei simplen Registry-Datentypen lesen oder schreiben, ohne gleich alles direkt mit der API zu implementieren. Oder man kommuniziert über Delphi-Grenzen hinweg etwa mit gelinkten DLLs.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.929 Beiträge
 
Delphi 12 Athens
 
#3

AW: (TRegistry) Sinn von CurrentKey

  Alt 21. Jun 2013, 08:14
Nebenbei kann man theoretisch aus diesem Handle auch wieder den Pfad herausholen. Dafür kann man NtQueryKey mit KeyNameInformation als Typ benutzen...

Normalerweise braucht man das Handle aber natürlich wirklich nur für die passenden API Aufrufe.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#4

AW: (TRegistry) Sinn von CurrentKey

  Alt 21. Jun 2013, 09:25
In der Tat, da kann es Anwendungsfälle geben. Ich wunderte mich bloß, weil in der Hilfe nichts darüber stand.

Alles klar
lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: (TRegistry) Sinn von CurrentKey

  Alt 11. Feb 2014, 15:52
Ich muss mich hier mal einklinken und das Thema wieder aufmachen. Denn man gelangt hierhin, wenn man CurrentKey und/oder CurrentPath in der Suche eingibt:

Weiter oben wurde    property CurrentPath: string read FCurrentPath; schon angesprochen. Bei einem von mir verwendeten Code (Siehe das Thema hier) ist CurrentPath aber immer leer. Der Code-Schnipsel dazu sieht wie folgt aus:
Delphi-Quellcode:
Procedure TMainForm.SearchReg;
Var
   SearchStr   : String;

   Procedure EnumAllKeys(hkey: THandle);
   Var
      l         : TStringList;
      n         : Integer;
      S         : String;
   Begin
      With TRegistry.Create Do
      Try
         RootKey:=hkey;
         OpenKeyReadOnly(EmptyStr);
         l:=TStringList.Create;
         Try
            GetKeynames(l);
            CloseKey;
            For n:=0 To Pred(l.Count) Do
            Begin
               S:=l[n];
               If Pos(SearchStr, UpperCase(S)) > 0 Then
                  LBRegistry.Items.Append(CurrentPath + '#'); // Warum ist das leer???
               If OpenKeyReadOnly(S) Then
               Begin
                  EnumAllKeys(CurrentKey);
                  CloseKey;
               End;
            End;
         Finally
            l.Free
         End;
      Finally
         Free;
      End;
   End;

Begin
   SearchStr:=UpperCase(EDSearch.Text);
   LBRegistry.Items.Clear;
   LBRegistry.Items.BeginUpdate;
   Try
//   EnumAllKeys(HKEY_CLASSES_ROOT );
//   EnumAllKEys(HKEY_CURRENT_USER );
      EnumAllKEys(HKEY_LOCAL_MACHINE );
//   EnumAllKEys(HKEY_USERS );
//   EnumAllKEys(HKEY_PERFORMANCE_DATA);
//   EnumAllKEys(HKEY_CURRENT_CONFIG );
//   EnumAllKEys(HKEY_DYN_DATA );
   Finally
      LBRegistry.Items.EndUpdate;
   End;
End;
Was an meiner Code-Variante ist falsch?

[edit]
Es scheint ein Problem mit CurrentPath zu geben. Anders lässt sich nicht erklären, warum z.B. in diesem Code der jeweilige Pfad durchgereicht und in KeyName_ zwischengespeichert wird.
Ich wäre für Erhellung trotzdem dankbar.
[/edit]

Gruß, Alex
Alex Winzer

Geändert von Schwedenbitter (11. Feb 2014 um 17:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#6

AW: (TRegistry) Sinn von CurrentKey

  Alt 11. Feb 2014, 19:29
Wieso sollte das ein Fehler sein?

OpenKeyReadOnly(EmptyStr); aka OpenKeyReadOnly(''); , womit der Pfad also wirklixh '' ist.

Und da vorher auch noch CloseKey; aufgerufen wurde, ist das erst Recht '' , denn dieses Property wird beim Schließen leergemacht.

Es wird zwar danach nochmal der Key geöffnet, aber auch gleich wieder geschlossen, so daß es im nächsten Schleifendurchgang auch wieder korrekt '' ist.



PS: OpenKeyReadOnly hat nicht umsonst ein Result.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Feb 2014 um 19:32 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: (TRegistry) Sinn von CurrentKey

  Alt 11. Feb 2014, 21:02
Wieso sollte das ein Fehler sein?
Ich habe doch garnicht das Wort "Fehler" benutzt. Ich habe doch bloß um Erhellung gebeten und die Antwort auch gern zur Kenntnis genommen; also das Problem verstanden. Dafür danke.
Ich habe jetzt eine weitere lokale Variable definiert und darin an mehreren Stellen CurrentPath abgefragt - Ergebnis: immer leer. Das wiederum verstehe ich nicht. Denn wenn die Procedure rekursiv aufgerufen und Rootkey:=hkey; gesetzt wurde, wäre nach meinem Verständnis der aktuelle (Unter)Schlüssel geöffnet. In CurrentPath sollte also nach meinem Verständnis was sinnvolles stehen; tut es aber nicht.
Also formuliere ich meine Frage mal um/anders:

Wie komme ich an den aktuelle Pfad?

Wenn ich den gesuchten String gefunden habe, will ich ja die Fundstelle auch ausgeben.
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz