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:
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;
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.
Danke für die Denkanregung, Nico.