segunda-feira, 13 de julho de 2009

Listando programas instalados

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.

3 comentários:

Bolívar disse...

Olá Maikel, chegou a testar este programa no Seven? Compilei aqui com RAD Studio 2007 mas não listou nenhum programa, 0 encontrados...
Bom tutorial, até.

Seiji disse...

Eu testei no D2007 compilando no winXP e depois executando em win 7 e funcionou normal

Alex Rudson disse...

ei amigo, não sei programar... será q vc nao pode disponibilizar seu prototipo para download?? obrigado!