Listando programas instalados
Autor: Maikel Scheid | Publicado: 2009-07-13T09:05:00-03:00

Já pensou em fazer um aplicativo capaz de listar todos os programas instalados em seu computador? E associar os devidos ícones a cada um dos programas instalados? Neste post irei mostrar a criação de uma rotina bem simples capaz de lhe exibir a lista de todos os programas que você possui instalados ai no seu Windows associando os icones correspondentes a cada um deles.  Para começar, crie uma nova aplicação Delphi for Win32 e adicione ao formulário principal um componente Button alterando a propriedade Align para "alTop", um Label com a propriedade Align para "alBotton", um ListView organizado como "alClient" e também um componente ImageList e adicione neste uma imagem que será utilizada como imagem Default caso não seja possível encontrar o ícone do programa listado.Acessando a unit de código do aplicativo, declare uma procedure chamada "ListaProgramasInstalados" e a seguir use as teclas Shift+Ctrl+C para fazer a implementação da mesma e adicione o código a seguir que se encontra comentado de acordo com as funcionalidades dos principais blocos que serão executados:  Obs.: declare as uses Registry e Shellapi.procedure TForm1.ListaProgramasInstalados;Var    List:TStringList;  Registry : TRegistry;  I:Integer;  Icon : TIcon;    DisplayName, DisplayIcon:String;  Item:TListItem; begin   { Cria objeto para pesquisa no registro do Windows }  Registry := TRegistry.Create;  { Cria uma objeto para listagem dos programas }  List     := TStringList.Create;  { objeto para associar os icones aos programas }  Icon     := TIcon.Create;    try        with Registry do   begin          RootKey := HKEY_LOCAL_MACHINE;            if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall',False) Then            Begin              { obtem a lista de nomes dos programas instalados }       GetKeyNames(List);              CloseKey;      End;           { percorre a lista de programas e busca o ícone para associá-lo }             for i:=0 to List.Count-1 do      begin               RootKey := HKEY_LOCAL_MACHINE;                OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+List[i],False);                DisplayName := ReadString('DisplayName');                DisplayIcon := ReadString('DisplayIcon');                 if DisplayName <> '' then                 begin                   { faz a associação do ícone ao programa }                   Item := ListView1.Items.Add;                   Item.Caption := DisplayName;          if DisplayIcon <> '' then             begin                         Icon.Handle := ExtractIcon(HInstance,PAnsiChar(DisplayIcon),0);                         Item.ImageIndex := ImageList1.AddIcon(Icon);                       end else                         Item.ImageIndex := 1;                end;                CloseKey;      End;    end;    Finally         { limpa os objetos da memória }      Registry.Free;   List.Free;      Icon.Free;    end; end;Por final, adicione ao evento OnClick do botão o código a seguir fazendo com que o procedimento seja executado e os programas listados, exibindo no Label a quantidade de programas que estão aparecendo na listagem.procedure TForm1.Button1Click(Sender: TObject);begin  ListaProgramasInstalados;  Label1.Caption := IntToStr(ListView1.Items.Count)+' programas instalados em seu computador.';end;Execute o aplicativo e clique sobre o botão para visualizar seu funcionamento. Abraço q até o próximo post.