Show list of installed programs

Use SHGetSpecialFolderLocation for getting identifier of special folder. After that, you must fill components of ShellExecuteInfo structure where one of the parameters is the identifier of special folder. Folder variable contains a constant, which shows special folder. For example: CSIDL_DRIVES - My Computer SIDL_CONTROLS - Control Panel CSIDL_DESKTOP - Desctop CSIDL_BITBUCKET - Recycle Bin

uses
  ShlObj, ShellAPI;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  MyItemIDList: PItemIDList;
  MyShellEx: TShellExecuteInfo;
  Folder: Integer;
begin
  Folder:=CSIDL_DRIVES;
  SHGetSpecialFolderLocation(Form1.Handle, Folder, MyItemIDList);
  with MyShellEx do
  begin
    cbSize:=Sizeof(MyShellEx);
    fMask:=SEE_MASK_IDLIST;
    Wnd:=Handle;
    lpVerb:=nil;
    lpFile:=nil;
    lpParameters:=nil;
    lpDirectory:=nil;
    nShow:=SW_SHOWNORMAL;
    hInstApp:=0;
    lpIDList:=MyItemIDList;
  end;
  ShellExecuteEx(@MyShellEx);
end;