WM_QUERYENDSESSION mensagem

A mensagem WM_QUERYENDSESSION é enviada quando o usuário opta por encerrar a sessão ou quando um aplicativo chama uma das funções de desligamento do sistema. Se qualquer aplicativo retornar zero, a sessão não será encerrada. O sistema para de enviar mensagens WM_QUERYENDSESSION assim que um aplicativo retorna zero.

Depois de processar essa mensagem, o sistema envia a mensagem WM_ENDSESSION com o parâmetro wParam definido para os resultados da mensagem WM_QUERYENDSESSION .

Uma janela recebe essa mensagem por meio da função WindowProc.

LRESULT CALLBACK WindowProc( 
  HWND hwnd,      // handle to window 
  UINT uMsg,      // message identifier 
  WPARAM wParam,  // not used 
  LPARAM lParam   // logoff option
);

Parâmetros

hwnd

Um identificador para a janela.

uMsg

O identificador WM_QUERYENDSESSION .

wParam

Esse parâmetro é reservado para uso futuro.

lParam

Esse parâmetro pode usar um dos valores a seguir. Se esse parâmetro for 0, o sistema será desligado ou reiniciado (não é possível determinar qual evento está ocorrendo).

Valor Significado
ENDSESSION_CLOSEAPP
0x00000001
O aplicativo está usando um arquivo que deve ser substituído, o sistema está sendo atendido ou os recursos do sistema estão esgotados. Para obter mais informações, consulte Diretrizes para aplicativos.
ENDSESSION_CRITICAL
0x40000000
O aplicativo é forçado a desligar.
ENDSESSION_LOGOFF
0x80000000
O usuário está fazendo logoff. Para obter mais informações, consulte Log Off.

 

Observe que esse parâmetro é uma máscara de bits. Para testar esse valor, use uma operação bit a bit; não teste a igualdade.

Retornar valor

Os aplicativos devem respeitar as intenções do usuário e retornar TRUE. Por padrão, a função DefWindowProc retorna TRUE para essa mensagem.

Se desligar corromper o sistema ou a mídia que está sendo queimada, o aplicativo poderá retornar FALSE. No entanto, é uma boa prática respeitar as ações do usuário.

Comentários

Quando um aplicativo retorna TRUE para essa mensagem, ele recebe a mensagem WM_ENDSESSION , independentemente de como os outros aplicativos respondem à mensagem WM_QUERYENDSESSION . Cada aplicativo deve retornar TRUE ou FALSE imediatamente ao receber essa mensagem e adiar todas as operações de limpeza até receber a mensagem WM_ENDSESSION .

Os aplicativos podem exibir uma interface do usuário solicitando ao usuário informações no desligamento, no entanto, não é recomendável. Após cinco segundos, o sistema exibe informações sobre os aplicativos que estão impedindo o desligamento e permite que o usuário as encerre. Por exemplo, o Windows XP exibe uma caixa de diálogo, enquanto o Windows Vista exibe uma tela inteira com informações adicionais sobre os aplicativos que bloqueiam o desligamento. Se o aplicativo precisar bloquear ou adiar o desligamento do sistema, use a função ShutdownBlockReasonCreate . Para obter mais informações, confira Alterações de desligamento do Windows Vista.

Os aplicativos de console podem usar a função SetConsoleCtrlHandler para receber notificação de desligamento.

Os aplicativos de serviço podem usar a função RegisterServiceCtrlHandlerEx para receber notificações de desligamento em uma rotina de manipulador.

Exemplos

Para obter um exemplo, consulte Log Off.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte
Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Cabeçalho
WinUser.h (inclua Windows.h)

Confira também

Fazer logon

Desligar

DefWindowProc

ExitWindows

SetProcessShutdownParameters

WM_ENDSESSION