Array
(
)

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

Dangardenal
   - 21 mar 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 !


Martins
   - 21 mar 2006


Citação:
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:

#Código


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


boa sorte!


Martins
   - 21 mar 2006

Deveriam permitir-nos editar nossas mensagens, só para ressaltar q vc pode trocar o 0 por nil, seria té melhor, evitando ao compilador ter q transformá-lo.

#Código


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



Adriano Santos
   - 21 mar 2006


Citação:
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.


Martins
   - 22 mar 2006


Citação:


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.


Isso mesmo Adriano no caso a dica q eu postei só serve para pegar pelo título da Janela.


Citação:

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 !


Nesse caso como o seu programa não tem uma Janela, muito menos um título, ele poderia ser localizado por sua Classe.

#Código


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


Boa sorte.


Adriano Santos
   - 22 mar 2006


Citação:

Nesse caso como o seu programa não tem uma Janela, muito menos um título, ele poderia ser localizado por sua Classe.

#Código


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




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


Martins
   - 22 mar 2006

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;


Siam
   - 22 mar 2006

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


Adriano Santos
   - 22 mar 2006


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


siam 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.


Siam
   - 22 mar 2006

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.