Condividi tramite


WM_QUERYENDSESSION messaggio

Il messaggio WM_QUERYENDSESSION viene inviato quando l'utente sceglie di terminare la sessione o quando un'applicazione chiama una delle funzioni di arresto del sistema. Se un'applicazione restituisce zero, la sessione non viene terminata. Il sistema arresta l'invio di messaggi WM_QUERYENDSESSION non appena un'applicazione restituisce zero.

Dopo l'elaborazione di questo messaggio, il sistema invia il messaggio di WM_ENDSESSION con il parametro wParam impostato sui risultati del messaggio di WM_QUERYENDSESSION .

Una finestra riceve questo messaggio tramite la relativa funzione WindowProc .

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

Parametri

Hwnd

Handle nella finestra.

Umsg

Identificatore WM_QUERYENDSESSION .

wParam

Questo parametro è riservato per usi futuri.

lParam

Questo parametro può essere uno o più dei valori seguenti. Se questo parametro è 0, il sistema sta arrestando o riavviando (non è possibile determinare quale evento si sta verificando).

Valore Significato
ENDSESSION_CLOSEAPP
0x00000001
L'applicazione usa un file che deve essere sostituito, il sistema viene sottoposto a servizio o le risorse di sistema vengono esaurite. Per altre informazioni, vedere Linee guida per le applicazioni.
ENDSESSION_CRITICAL
0x40000000
L'applicazione è costretta ad arrestare.
ENDSESSION_LOGOFF
0x80000000
L'utente sta disconnettendo. Per altre informazioni, vedere Disconnessione.

 

Si noti che questo parametro è una maschera di bit. Per testare questo valore, usare un'operazione con bit; non testare l'uguaglianza.

Valore restituito

Le applicazioni devono rispettare le intenzioni dell'utente e restituire TRUE. Per impostazione predefinita, la funzione DefWindowProc restituisce TRUE per questo messaggio.

Se l'arresto potrebbe danneggiare il sistema o il supporto che viene bruciato, l'applicazione può restituire FALSE. Tuttavia, è consigliabile rispettare le azioni dell'utente.

Commenti

Quando un'applicazione restituisce TRUE per questo messaggio, riceve il messaggio di WM_ENDSESSION , indipendentemente dal modo in cui le altre applicazioni rispondono al messaggio di WM_QUERYENDSESSION . Ogni applicazione deve restituire TRUE o FALSE immediatamente dopo aver ricevuto questo messaggio e rinviare tutte le operazioni di pulizia fino a quando non riceve il messaggio di WM_ENDSESSION .

Le applicazioni possono visualizzare un'interfaccia utente che richiede informazioni all'arresto, ma non è consigliabile. Dopo cinque secondi, il sistema visualizza informazioni sulle applicazioni che impediscono l'arresto e consente all'utente di terminarli. Ad esempio, Windows XP visualizza una finestra di dialogo, mentre Windows Vista visualizza una schermata intera con informazioni aggiuntive sul blocco dell'arresto delle applicazioni. Se l'applicazione deve bloccare o rinviare l'arresto del sistema, usare la funzione ShutdownBlockReasonCreate . Per altre informazioni, vedere Arresta modifiche per Windows Vista.

Le applicazioni console possono usare la funzione SetConsoleCtrlHandler per ricevere la notifica di arresto.

Le applicazioni di servizio possono usare la funzione RegisterServiceCtrlHandlerEx per ricevere notifiche di arresto in una routine del gestore.

Esempio

Per un esempio, vedere Disconnessione.

Requisiti

Requisito Valore
Client minimo supportato
Windows XP [app desktop | App UWP]
Server minimo supportato
Windows Server 2003 [app desktop | App UWP]
Intestazione
WinUser.h (include Windows.h)

Vedi anche

Disconnessione

Arresto

DefWindowProc

ExitWindows

SetProcessShutdownParameters

WM_ENDSESSION