mierda
11-12-2006, 20:06:38
Hola, teniendo el siguiente ejemplo ...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WMQueryEndSession (var Msg: TWMQueryEndSession);
message WM_QueryEndSession; // esta funcion intercepta el mensaje que le lanza el windows a cerrar a la ventana de delphi
end;
var
Form1: TForm1;
EndSessionFlags: integer; // esti es para q no se cierre hasta que no me de la gana
ProcessStatus: integer; // idem de arriba
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
showmessage (inttostr(msg.source) + ' ' + Msg.Result);
case ProcessStatus of
0: // Primera vez
begin
ProcessStatus := 1; // Evita entrar aquí de nuevo
EndSessionFlags := Msg.Source; // Guarda la forma de cierre
Msg.Result := 0; // Decimos a Windows que no termine
// realizar el proceso dentro de unos milisegundos
end;
1: // Estamos procesando
Msg.Result := 0; // Decimos a Windows que no estamos listos
2: // Hemos terminado de realizar el proceso
begin
ProcessStatus := 0; // Listo para la próxima (si corresponde)
Msg.Result := 1; // Estamos listos. Se puede cerrar Windows
end;
end;
end;
end.
da igual que yo le mande cerrar la sesion, apagar o reiniciar ... el showmessage me muestra que el valor siempre es 0, con lo que siempre me cierra la sesion.
Alguna idea de por que pasa esto? Un saludo.
PD: falta un trocito de codigo que pone el 2: //Que hemos terminado de realizar el proceso, pero eso no es importante ... trabajo con delphi7 y win2000, pero en xp tambien me pasa.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WMQueryEndSession (var Msg: TWMQueryEndSession);
message WM_QueryEndSession; // esta funcion intercepta el mensaje que le lanza el windows a cerrar a la ventana de delphi
end;
var
Form1: TForm1;
EndSessionFlags: integer; // esti es para q no se cierre hasta que no me de la gana
ProcessStatus: integer; // idem de arriba
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
showmessage (inttostr(msg.source) + ' ' + Msg.Result);
case ProcessStatus of
0: // Primera vez
begin
ProcessStatus := 1; // Evita entrar aquí de nuevo
EndSessionFlags := Msg.Source; // Guarda la forma de cierre
Msg.Result := 0; // Decimos a Windows que no termine
// realizar el proceso dentro de unos milisegundos
end;
1: // Estamos procesando
Msg.Result := 0; // Decimos a Windows que no estamos listos
2: // Hemos terminado de realizar el proceso
begin
ProcessStatus := 0; // Listo para la próxima (si corresponde)
Msg.Result := 1; // Estamos listos. Se puede cerrar Windows
end;
end;
end;
end.
da igual que yo le mande cerrar la sesion, apagar o reiniciar ... el showmessage me muestra que el valor siempre es 0, con lo que siempre me cierra la sesion.
Alguna idea de por que pasa esto? Un saludo.
PD: falta un trocito de codigo que pone el 2: //Que hemos terminado de realizar el proceso, pero eso no es importante ... trabajo con delphi7 y win2000, pero en xp tambien me pasa.