Flecha
07-04-2008, 11:10:20
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.
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.