Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TRegistry, Aktuellen Pfad speichern... (https://www.delphipraxis.net/21506-tregistry-aktuellen-pfad-speichern.html)

shareholder 3. Mai 2004 23:02


TRegistry, Aktuellen Pfad speichern...
 
hallo, ich möchte für jeden key die
values Name + String in mein Array Of Record speichern

Delphi-Quellcode:
reg.RootKey := HKEY_LOCAL_MACHINE;

// einlesen der keys in TStringList 'Schluessel'
...

MeinPersoenlicherRoot := 'HARDWARE\DESCRIPTION\';

if (reg.OpenKey(MeinPersoenlicherRoot, FALSE)) then begin
// Informationen in Array Of Record speichern
for i:=0 to Schluessel.Count-1 do begin
  reg.OpenKey(Schluessel[i], False);
    DasArray.Programm := reg.ReadString('Name')
    DasArray.Pfad := reg.ReadString('String')
  reg.CloseKey;
end;
reg.CloseKey;
mein problem:

ich habe hier wohl eine etwas blöde verschachtelung vorgenommen.

ich suche nach einer möglichkeit, einen Rootkey à la
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION festzulegen

mit Registry.RootKey := kann ich ja nur die erste Ebene als Root kennzeichnen. :(

für die Zeile : reg.OpenKey(Schluessel[i], False); könnte ich auch theoretisch
reg.OpenKey('HARDWARE\DESCRIPTION\'+Schluessel[i], False); schreiben, nur stelle ich mir vor, das die Ladezeiten, dann ziemlich länger sind.

Stimmt das ? Ich meine, dann müsste sich ja die CPU beim Value-Zugriff immer vom Root zum Zielkey hochsuchen. :-(

Gibt es eine Alternative ?
Habe keine gefunden. :gruebel:

Phoenix 4. Mai 2004 07:41

Re: TRegistry, Aktuellen Pfad speichern...
 
Du importierst folgenden API-Call zusätzlich zur Unit Registry:
Delphi-Quellcode:
type
   // this function maps a predefined key to the argument; used for chrooting a key
   // to a new hive in the registry. this only affects the calling process!
   function RegOverridePredefKey(a_hKey: HKEY;         // predefined key [HIVE]         a_TargethKey: HKEY): Longint; stdcall;      // OPEN! key. all calls to HIVE will end up here

implementation
   function RegOverridePredefKey(a_hKey: HKEY; a_TargethKey: HKEY): Longint; external 'advapi32.dll' name 'RegOverridePredefKey';
Du öffnest nun einmal den gewünschten Rootkey, und öffnest dann Deinen persönlichen Rootkey.
Danach wirfst Du beide HKEY - Werte in die RegOverridePredefKey rein.

JEDER folgende Aufruf von HKEY_LOCAL_MACHINE landet nun in Deinem persönlichen Rootkey.

Solltest Du dieses Mapping wieder zurückstellen wollen, rufst Du diese Funktion noch einmal mit dem Rootkey auf, und übergibst als Target-hKey einfach null bzw. 0, da HKEY ein Longint - Wert ist.

[msdn]ms-help://MS.MSDNQTR.2004APR.1033/sysinfo/base/regoverridepredefkey.htm[/msdn]


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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