Himmel, Gesäß und Nähgarn, ich hasse diese Code-Kopiererei ohne Hintergrundwissen
. Also gut, ich vervollständige das mal:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry;
procedure TForm2.FormCreate(Sender: TObject);
const
UNINST_PATH = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
Reg: TRegistry;
SubKeys: TStringList;
ListItem: TlistItem;
i: integer;
sDisplayName, sUninstallString: string;
begin
{
ListView1.ViewStyle := vsReport;
ListView1.Columns.add;
ListView1.Columns.add;
ListView1.Columns[0].caption := 'DisplayName';
ListView1.Columns[1].caption := 'UninstallString';
ListView1.Columns[0].Width := 300;
ListView1.Columns[1].Width := 300;
}
Reg := TRegistry.Create;
try
try
Listview1.Items.BeginUpdate;
Listview1.Items.Clear;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly(UNINST_PATH) then //hier
begin
SubKeys := TStringList.Create;
try
Reg.GetKeyNames(SubKeys); //und hier
Reg.CloseKey; //und hier
for i := 0 to subKeys.Count - 1 do
if Reg.OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then //und hier
try
sDisplayName := Reg.ReadString('DisplayName'); //und hier
sUninstallString := Reg.ReadString('UninstallString'); //und hier
if sDisplayName <> '' then
begin
ListItem := Listview1.Add; //und hier
ListItem.Caption := sDisplayName;
ListItem.subitems.Add(sUninstallString);
end;
finally
Reg.CloseKey; //und hier
end;
finally
SubKeys.Free;
end;
end;
finally
ListView1.AlphaSort;
Listview1.Items.EndUpdate; //und hier
end;
finally
Reg.CloseKey; //und hier
Reg.Free; //und hier
end;
end;
Wenn ich nichts übersehen habe, sollte das so gehen.