![]() |
Registry und Typen
Quasi das Gegenstück zu
![]() Mit "GetValue" kann man einen Wert aus der Registry lesen, der als Objekt zurückgegeben und entsprechend gecastet werden muss. Bei Strings kein Problem:
Delphi-Quellcode:
Das Casten in andere Typen ist, IMHO, auch nicht das Problem. Aber wie kann ich ermitteln, welcher Typ vorliegt? Sprich: Ob der Wert ein String, ein DWord oder bspw. ein Binärwert ist?
reg := Registry.LocalMachine.OpenSubKey('Schlüsselname');
if(reg <> nil) then try ListView1.Items.Add(string(reg.GetValue('Name des Wertes'))); finally reg.Close; end; |
Re: Registry und Typen
In der WinAPI gibt es die Funktion RegQueryInfoKey. Ich denke diese liefert die gewünschten Infos.
|
Re: Registry und Typen
Das heißt mit anderen Worten: Ich muss die Win32-API-Funktion benutzen, weil .NET von sich aus nichts in der Art zur Verfügung stellt. Okay, ich wollte ohnehin mal ausprobieren, wie so was funktioniert. ;)
Danke, Bernhard. |
Re: Registry und Typen
Zitat:
|
Re: Registry und Typen
Es ist sogar noch einfacher. ;) Ich habe ja vergessen, dass .NET durchaus auch Vorteile hat. Folgendes Beispiel löst mein Problem und zeigt zusätzlich auch noch den Typnamen (wenn auch im .NET-Format) an.
Delphi-Quellcode:
Hintergedanke ist natürlich ein Programm, das die Liste der installierten Software in einem Tree-View anzeigt, und bei Auswahl eines Schlüssels (= Eintrag im TV) werden alle Einträge ermittelt und in einer List-View angezeigt.
const
szUninst = 'Software\Microsoft\Windows\CurrentVersion\Uninstall'; procedure TMainForm.LoadRegValues(const szName: string); var reg : RegistryKey; vals : array of string; i : integer; li : ListViewItem; obj : TObject; begin lv.BeginUpdate; lv.Items.Clear; // Schlüssel öffnen, ... reg := Registry.LocalMachine.OpenSubKey(szUninst + '\' + szName); if(reg <> nil) then try vals := reg.GetValueNames; if(length(vals) > 0) then begin for i := low(vals) to high(vals) do begin // Name, ... li := lv.Items.Add(vals[i]); obj := reg.GetValue(vals[i],nil); // ... & Typ, ... li.SubItems.Add(obj.GetType.ToString); // ... & Wert li.SubItems.Add(obj.ToString); end; SetLength(vals,0); end; finally reg.Close; end; lv.EndUpdate; end; Danke für die Denkanregung, Nico. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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