PDA

Ver la Versión Completa : ¿ Cual es la clase del emule ?


Javier_A
25-11-2005, 12:10:15
Hola a tod@s,
He creado un programa para cerrar aplicaciones y quiero que me cierre el emule, entonces....

Una vez abierto el emule abro el WinSight, para averiguar cual es la clase del emule; aparecen un sinfin de programas en hidden y por mas que pongo una y otra clase, ( de todos los programas que hay abiertos del emule ), no logro cerrar la aplicación.
¿ Alguien me puede decir cual es exactamente el nombre de la clase que cierra la aplicación ?

Os espero
Salu2

Neftali [Germán.Estévez]
25-11-2005, 13:22:28
Hay muchas utilizades e Internet que te permiten ver "la clase" de una ventana (aplicación); Seguro que si buscas las encuentras sin problemas:
* WinSpy 1.0; Warren Galyen
* WinExplorer 1.30 de nirSoft
* WinDowse de Greatis Software
* ...

Javier_A
25-11-2005, 16:56:19
Hola Neftali, he instalado el WinExplorer 1.30, y la clase del emule me dice que es: #32770.
Si que me cierra el emule, pero tambien el winexplorer, ( y eso que su clase es otra) ??????
Este es el procedimiento que gasto:


procedure TForm1.Timer1Timer(Sender: TObject);
var
hWnd : THandle;
begin

hWnd := FindWindow( '#32770', nil );
if hWnd <> 0 Then
begin
Form2.Visible:=True;
SendMessage( hWnd, WM_CLOSE, 0, 0 );
end;
end;

El form2 es una ventana de aviso de que se va a cerrar la aplicacion y no para se salir, ¿ que programas estara cerrando ?, ¿ sabes que es lo que puede pasar ?

Gracias y un saludo

Neftali [Germán.Estévez]
25-11-2005, 17:59:54
Siguen saliendo los avisos, porque no debe estar cerrando corectamente el Emule y como el timer sigue funcionando, sigue encontrando la ventana; Después de enviar el mensaje para cerrar debería desactivar el Timer.


Timer1.Enabled := False;

Javier_A
28-11-2005, 10:34:59
Hola Neftali,
Un problema añadido, resulta que la clase del emule #32770 es la misma, por ejemplo, que la que utiliza "WinExplorer 1.30", "El Administrador de Tareas de Windows" e imagino que bastantes programas mas, asi que cuando intento cerrar esta clase (#32770), se me cierran también los otros.
¿ Se puede filtrar las clases dependiendo por ejemplo del nombre del programa ?
Este es el procedimiento:

procedure TForm1.Timer1Timer(Sender: TObject);
var
hWnd : THandle;
begin

hWnd := FindWindow( '#32770', nil );
if hWnd <> 0 Then
begin
Form2.Visible:=True;
SendMessage( hWnd, WM_CLOSE, 0, 0 );
end;
end;

Perdona las molestias
Salu2

Neftali [Germán.Estévez]
28-11-2005, 11:13:39
...resulta que la clase del emule #32770 es la misma, por ejemplo, que la que utiliza "WinExplorer 1.30", "El Administrador de Tareas de Windows" e imagino que bastantes programas mas....

¿ Se puede filtrar las clases dependiendo por ejemplo del nombre del programa?
Efectivamente, no me había dado cuenta; Por ejemplo, la ayuda de Delphi también lo tiene (y como tú dices supongo que muchos más...);

Respecto a la otra pregunta, la otra opción que tienes para encontrar la ventana es utilizar el título; Con la misma función que estás utilizando, pero dejando el primer parámetro vacío. Algo así:


FindWindow(Nil, Pchar('notepad'))


El problema es que a veces el título de la ventana es variable, por ejemplo, como pasa con el Word, que el título de la ventana incluye el nombre del documento activo; En esos casos, lo único que se me ocurre es accder a la lista de procesos activos, recorrerlos e intentar encontrarla con sólo alguna parte del título.