Ja pensou em fazer um aplicativo capaz de listar todos os programas instalados em seu computador? E associar os devidos icones a cada um dos programas instalados? Neste post irei mostrar a criacao de uma rotina bem simples capaz de lhe exibir a lista de todos os programas que voce possui instalados ai no seu Windows associando os icones correspondentes a cada um deles. Para comecar, crie uma nova aplicacao Delphi for Win32 e adicione ao formulario principal um componente Button alterando a propriedade Align para "alTop", um Label com a propriedade Align para "alBotton", um ListView organizado como "alClient" e tambem um componente ImageList e adicione neste uma imagem que sera utilizada como imagem Default caso nao seja possivel encontrar o icone do programa listado.Acessando a unit de codigo do aplicativo, declare uma procedure chamada "ListaProgramasInstalados" e a seguir use as teclas Shift+Ctrl+C para fazer a implementacao da mesma e adicione o codigo a seguir que se encontra comentado de acordo com as funcionalidades dos principais blocos que serao 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 icone para associa-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 associacao do icone 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 memoria } Registry.Free; List.Free; Icon.Free; end; end;Por final, adicione ao evento OnClick do botao o codigo a seguir fazendo com que o procedimento seja executado e os programas listados, exibindo no Label a quantidade de programas que estao 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 botao para visualizar seu funcionamento. Abraco q ate o proximo post. Uma dica bem rapida e simples de ser implementada, imaginando sua tela de cadastro de Clientes, onde um dos campos se refere a entrada de CEP e voce vai implementar um formulario para pesquisa de Cidades e CEPs, a forma comum e colocar um pequeno botao ao lado do Edit e adicionar o codigo que chama a janela de consulta, mas e agilizando isso sem usar o mouse, com teclas de atalho, iria ajudar?Neste mesmo Edit, vamos fazer que quando o mesmo estiver com o foco, ao pressionar a tecla F2 a janela de busca sera exibida, basta que adicione ao evento OnKeyDown o seguinte trecho de codigo:procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;