unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,registry, StdCtrls;

type
TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;
myList:TStringList;
i:integer;
curkey,SName:string;
begin
reg:=TRegistry.Create;
MyList:=TStringList.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
if reg.OpenKey(SoftwareMicrosoftWindowsCurrentVersionuninstall,False) then
Begin
    reg.GetKeyNames(myList);
    curkey:=reg.CurrentPath;
    reg.CloseKey;
    for i:=0 to MyList.Count-1 do
    if reg.OpenKey(curKey++MyList.Strings[i],False) then
    Begin
      if reg.ValueExists(DisplayName) then
        Sname:=reg.ReadString(DisplayName)
      else
        SName:=MyList.Strings[i];
      if reg.ValueExists(DisplayVersion) then
        Sname:=Sname+ 版本:+reg.ReadString(DisplayVersion)
      else
        SName:=MyList.Strings[i];
      Listbox1.Items.Add(SName);
      reg.CloseKey;
    end;
end;
end;
end.