Pegar handle pelo o nome do exe de uma aplicação externa ?

21/03/2006

Bom eu preciso pegar o handle de uma aplicação externa pelo nome do exe, lembrando que este exe do qual eu queira pegar o handle não tem janelas nem formularios, por isso eu preciso saber como pegar pelo nome do exe !


Dangardenal

Respostas

21/03/2006

Martins

Bom eu preciso pegar o handle de uma aplicação externa pelo nome do exe, lembrando que este exe do qual eu queira pegar o handle não tem janelas nem formularios, por isso eu preciso saber como pegar pelo nome do exe !


Tente fazer isso com o código abaixo:

procedure TForm1.Button4Click(Sender: TObject);
var
 nHandle : THandle;
begin
  nHandle := FindWindow( 0, ´Calculadora´ );
  ShowMessage( IntToStr( nHandle ) );
end;


boa sorte!


Responder Citar

21/03/2006

Martins

Deveriam permitir-nos editar nossas mensagens, só para ressaltar q vc pode trocar o [b:92a3a7aa10][color=red:92a3a7aa10]0[/color:92a3a7aa10][/b:92a3a7aa10] por [color=blue:92a3a7aa10][b:92a3a7aa10]nil[/b:92a3a7aa10][/color:92a3a7aa10], seria té melhor, evitando ao compilador ter q transformá-lo.

procedure TForm1.Button4Click(Sender: TObject);
var
 nHandle : THandle;
begin
  nHandle := FindWindow( nil, ´Calculadora´ );
  ShowMessage( IntToStr( nHandle ) );
end;



Responder Citar

21/03/2006

Adriano Santos

Deveriam permitir-nos editar nossas mensagens...


Pode crer Martins, mas como tem a prévia me acostumei...rsrs.

Em relação ao Handle do aplicativo, é isso mesmo cara, mas lembrando que só vai funcionar se o executável estiver ativo, ou seja, no caso da calculadora somente se ela estiver aberta.

A sua dúvida ficou um pouco sem explicação, diga exatamente o que necessita.


Responder Citar

22/03/2006

Martins

Em relação ao Handle do aplicativo, é isso mesmo cara, mas lembrando que só vai funcionar se o executável estiver ativo, ou seja, no caso da calculadora somente se ela estiver aberta. A sua dúvida ficou um pouco sem explicação, diga exatamente o que necessita.[/quote:45a2732a87] Isso mesmo [b:45a2732a87]Adriano[/b:45a2732a87] no caso a dica q eu postei só serve para pegar pelo título da Janela. [quote] Bom eu preciso pegar o handle de uma aplicação externa pelo nome do exe, [color=red:45a2732a87][b:45a2732a87]lembrando que este exe do qual eu queira pegar o handle não tem janelas nem formularios[/b:45a2732a87][/color:45a2732a87], por isso eu preciso saber como pegar pelo nome do exe !


Nesse caso como o seu programa não tem uma Janela, muito menos um título, ele poderia ser localizado por sua [color=blue:45a2732a87][b:45a2732a87]Classe[/b:45a2732a87][/color:45a2732a87].

var 
 nHandle : THandle; 
begin 
  nHandle := FindWindow( Classe_do_Aplicativo, nil ); 
  ShowMessage( IntToStr( nHandle ) ); 
end; 


Boa sorte.


Responder Citar

22/03/2006

Adriano Santos

Nesse caso como o seu programa não tem uma Janela, muito menos um título, ele poderia ser localizado por sua [color=blue:d2c31c6038][b:d2c31c6038]Classe[/b:d2c31c6038][/color:d2c31c6038].
var 
 nHandle : THandle; 
begin 
  nHandle := FindWindow( Classe_do_Aplicativo, nil ); 
  ShowMessage( IntToStr( nHandle ) ); 
end; 


Pode crer, o ruim é saber a bendita classe...:D


Responder Citar

22/03/2006

Martins

Vamos esperar pelo retorno do colega, dependendo da resposta dele, eu arrumo tempo para preparar um exemplo básico e coloco aqui usando:
1 ListBox;
2 Button - 1 para pegar o handle do aplicativo e o outro para fechar o mesmo;


Responder Citar

22/03/2006

Siam

Essa eu não entendí direito.
Se o aplicativo não tem Forms, FindWindow irá buscar por qual classe ?


Responder Citar

22/03/2006

Adriano Santos

Essa eu não entendí direito. Se o aplicativo não tem Forms, FindWindow irá buscar por qual classe ?


[b:343a4381b8]siam[/b:343a4381b8] todo aplicativo tem uma classe, até onde sei, não necessariamente a classe não está ligada ao ter ou não uma janela. Experimente abrir o aplicativo WinSigth em Iniciar >> Programas >> Borland Delphi XX >> WinSigth32 este aplicativo lista pra você todas as janelas ativas, vai ver que várias não estaão presentes, ou seja, visiveis mas contem uma classe.


Responder Citar

22/03/2006

Siam

Mas vc pode fazer um aplicativo sem ter qualquer classe e gerar um .exe
Todo aplicativo possui um processo aberto pelo Windows que é sua Thread principal mas não necessariamente possui uma classe.
Executáveis que rodam sem janelas, nem devem ter Handles.


Responder Citar