Windows Query End Session

Hoje eu vou ensinar a procedure em pascal que fica atenta às mensagens que o Windows envia as aplicações.. hoje em especifico, a mensagem de encerramento dos programas para o desligamento do computador.

O Windows para encerrar os processos envia uma mensagem aos programas uma única vez, e aguarda até que os programas respondam com confirmação está mensagem para que ele possa encerrar o Explorer e finalizar.

Obs: A mensagem que ele envia pode ser simulada no Delphi, com está função..
SendMessage(HWND, MESSAGE, 0, 0);

Agora vamos à inserção da procedure que identifica a mensagem de desligamento.

Antes de mais nada verifique a declaração de: Windows, nas uses.

Agora no public da unit.. cole está referencia de procedure:
procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QueryEndSession;

Ps: WM_QueryEndSession, é a mensagem que é enviada do windows para o seu programa, informando que o Windows está em processo de desligamento!

Declare uma variável global chamada: permitirdesligar como string;
Var permitirdesligar : string;

Agora cole na implementação a procedure:
procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);
begin
if uppercase(permitirdesligar) = ‘SIM’ then
begin
application.terminate;
Msg.Result := 1;
End
Else
Abort;
End;

Lembrando que, na verdade está variável global apenas vai armazenar as respostas SIM e NÃO, e identificar que quando a resposta for SIM, ele irá enviar a resposta de confirmação e encerrar o programa, caso contrario, ira abortar a mensagem.

Agora basta você digitar:
permitirdesligar:=’não’;
quando quiser que seu programa continue executando!.. e depois coloque como:
permitirdesligar:=’sim’;
para que ele continue o processo de desligamento normalmente.

Enjoy ;)

Uma resposta para “Windows Query End Session”

  1. beto Disse:

    koee slockz ..
    =]
    só pra te lembraa de nao deixar de postar aqui ! =p
    ee pedii coisas qee possoa servir pro dia a dia .. ;D
    e que sejam simples pra c aprender .. ;D
    vlew bro ! ;*

Deixe uma resposta