Occurs when the user is trying to log off or shut down the system.
Assembly: System (in System.dll)
This is a cancelable event. Setting the Cancel property to true will request that the session continues to run. It provides no guarantee that the session will not end.
If you are using in a Windows form to detect a system logoff or reboot, there is no deterministic way to decide whether the Closing event will fire before this event.
If you want to perform some special tasks before Closing is fired, you need to ensure that fires before Closing. To do this, you need to trap the WM_QUERYENDSESSION in the form by overriding the WndProc function. This example demonstrates how to do this.
Private Shared WM_QUERYENDSESSION As Integer = &H11 Private Shared systemShutdown As Boolean = False Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = WM_QUERYENDSESSION Then MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot") systemShutdown = True End If ' If this is WM_QUERYENDSESSION, the closing event should be raised in the base WndProc. MyBase.WndProc(m) End Sub 'WndProc Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing If (systemShutdown) Then ' Reset the variable because the user might cancel the shutdown. systemShutdown = False If (System.Windows.Forms.DialogResult.Yes = _ MessageBox.Show("My application", "Do you want to save your work before logging off?", MessageBoxButtons.YesNo)) Then e.Cancel = True Else e.Cancel = False End If End If End Sub
Console applications do not raise the event.
This event is only raised if the message pump is running. In a Windows service, unless a hidden form is used or the message pump has been started manually, this event will not be raised. For a code example that shows how to handle system events by using a hidden form in a Windows service, see the SystemEvents class.
Because this is a static event, you must detach your event handlers when your application is disposed, or memory leaks will result.
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2