Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Question ¿Cómo simular [Alt]+[F4] sobre otra aplicación?

Hola a todos.

Necesito detectar cuándo una aplicación está "muriéndose".
Me explico. Una aplicación se puede cerrar de varias formas:
- ejecutando Close desde su TForm principal.
- ejecutando Free, o Release de su TForm principal.
- ejecutando Application.Terminate
- ejecutando Halt()
- pulsando el botón de sistema [X] de la esquina superior izquierda.
- pulsando [Alt]+[F4]
- lanzando un TerminateProcess desde otra segunda aplicación.
- matando la aplicación desde el Administrador de Tareas
- etc...

Pues bien. Necesito detectar cuándo una aplicación está "muriendo" (por cualquiera de las causas anteriores, o por cualquier otra).

He probado con controlar los eventos de cierre de la aplicación:
- onCloseQuery
- onClose
- onHide
- onDestroy
- un override sobre el destructor Destroy
- e incluso desde la sección Finalization

Así he conseguido detectar la "muerte" de la aplicación por casi todas las causas antes descritas, excepto cuando quiero matar la aplicación por orden de una segunda aplicación. Esto lo hago ejecutando TerminateProcess. Así, la aplicación muere, pero nunca se entera de que la están matando.

Se me ha ocurrido simular el mensaje que se genera en Windows cuando el usuario pulsa [Alt]+[F4]. Pero no consigo averiguar qué mensaje es. Una vez que lo sepa usaré SendMessage o PostMessage para enviar dicho mensaje y que el propio Windows se encarge de matar la aplicación.

¿Alguna idea?

Muchas gracias.

Última edición por Flecha fecha: 07-04-2008 a las 11:36:00.
Responder Con Cita
  #2  
Antiguo 07-04-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Hola,

Código Delphi [-]
PostMessage(hwnd, WM_CLOSE, 0, 0);

*hwnd es el handle de la ventana principal de la aplicación que se quiere cerrar.
Responder Con Cita
  #3  
Antiguo 08-04-2008
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Gracias seoane.

He probado eso, y esto otro:
Código Delphi [-]
PostMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0);

Unas veces funciona y otras me aparece el siguente mensaje:

Cita:
COM SERVER WARNING.

There are still active COM objects in this application. One or more clients may have references to these objects, so manually closing this application may cause those client application(s) to fail.

Are you sure want to close this application?

[Yes] [No]
Creo que sé lo que es. Pero me gustaría consultarlo para contrastar opinión.

Creo que el mensaje aparece porque la aplicación que quiero cerrar ha sido abierta desde un programa distinto al que lanzó el mensaje de cierre.
¿Qué opináis?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Sobreponer mi aplicacion sobre otra JAI_ME Varios 1 04-05-2006 02:35:37
Funcionar sobre otra aplicacion miguel_fr Varios 2 11-05-2005 17:58:30
Como podría trabajar con una Aplicación de otra RED???? AGAG4 Varios 0 15-10-2004 18:47:52
Simular click en otra aplicacion(es) doverzhoff Varios 3 22-12-2003 23:31:32


La franja horaria es GMT +2. Ahora son las 06:38:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi