Ver Mensaje Individual
  #4  
Antiguo 06-12-2005
Carlos Hurtado Carlos Hurtado is offline
Miembro
 
Registrado: dic 2004
Posts: 30
Reputación: 0
Carlos Hurtado Va por buen camino
Windows no cierra mientras no se cierre aplicacion

Hola amigo no se si te servira esta rutina sacada de Trucomania:



Cuando el usuario sale de Windows teniendo nuestra apliacación abierta, es posible que la pille en un mal
momento (sin grabar datos, en medio de un proceso, etc). Esto se puede evitar capturando el mensaje que envia
Windows a todas las apliacaciones cuando el usuario quiere cerrar Windows: el mensaje
WM_QUERYENSESSION

Para capturar el mensaje y enviarlo a nuestro código de tratamiento del mensaje:


Código Delphi [-]
 
     TForm1 = class(TForm)
     ..........
       private
         procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION;
     ..........
     end;

Es decir, basta con que añadamos en la claúsula Private de la declaración del form la siguiente linea:

Código Delphi [-]
 
    procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION;

y luego, en la parte implementation, ponemos el código que trate el mensaje:

Código Delphi [-]
 
 
     procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
     begin 
       MessageBox(Handle, 'Cierra antes el programa', nil, MB_OK);
       Msg.result := 0;
     end;


Si en lugar de abortar el cierre de Windows, queremos que siga realizandose, basta con que cambiemos el

Código Delphi [-]
Msg.result:=0 por Msg.result:=1.

NOTA: El comportamiento del mensaje difiere en win98 y WinNT, así que mirate la ayuda del mensaje
WM_QUERYENDSESSION.


Saludos
Responder Con Cita