Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как получить список инсталлированных програм?

01.01.2007
uses 
 
Registry;
 
procedure TForm1
.Button1Click(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;
 
with Reg do
   
try
     
with ListView1.Items do
       
try
         
BeginUpdate;
         
Clear;
         
RootKey := HKEY_LOCAL_MACHINE;
         
if OpenKeyReadOnly(UNINST_PATH) then
         
begin
           
SubKeys := TStringList.Create;
           
try
             
GetKeyNames(SubKeys);
             
CloseKey;
             
for i := 0 to subKeys.Count - 1 do
               
if OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then
                 
try
                    sDisplayName    
:= ReadString('DisplayName');
                    sUninstallString
:= ReadString('UninstallString');
                   
if sDisplayName <> '' then
                   
begin
                     
ListItem         := Add;
                     
ListItem.Caption := sDisplayName;
                     
ListItem.subitems.Add(sUninstallString);
                   
end;
                 
finally
                   
CloseKey;
                 
end;
           
finally
             
SubKeys.Free;
           
end;
         
end;
       
finally
          ListView1
.AlphaSort;
         
EndUpdate;
       
end;
   
finally
     
CloseKey;
     
Free;
   
end;
end;

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php