Como interromper o desligamento do Windows

 

Esta dica ensina como interromper o processo de desligamento do Windows. Com esta dica você poderá evitar que desliguem o Windows enquanto a sua aplicação estiver aberta e correr o risco de perder ou corromper dados. O código abaixo mostra como fazer isto.

 

private

   { Private declarations }

   procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QueryEndSession;

 

public

   { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);

begin

    if MessageDlg('O Windows deseja desligar agora, Permitir ?', mtConfirmation, [mbYes,mbNo], 0) = mrNo then

        Msg.Result := 0

    else

        Msg.Result := 1;

end;

 

A Msg "WM_QUERYENDSESSION" é enviada para todas as aplicações que estão "abertas" quando o usuário clica em uma das opções "desligar" do windows ou quando uma aplicação chama a função "ExitWindows". Se qualquer aplicação retornar zero, o Windows não se fechará e sistema irá parar de enviar as Msg "WM_QUERYENDSESSION".

Após ter processado esta Msg, o sistema envia a mensagem "WM_ENDSESSION" junto do parâmetro "wParam" com os resultados da mensagem de "WM_QUERYENDSESSION". Finalizando ou não o Windows.

 

Marco Antonio

marco@clubedelphi.net