SystemEvents.SessionEnding Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce cuando el usuario intenta cerrar una sesión o apagar el sistema.
public:
static event Microsoft::Win32::SessionEndingEventHandler ^ SessionEnding;
public static event Microsoft.Win32.SessionEndingEventHandler SessionEnding;
public static event Microsoft.Win32.SessionEndingEventHandler? SessionEnding;
member this.SessionEnding : Microsoft.Win32.SessionEndingEventHandler
Public Shared Custom Event SessionEnding As SessionEndingEventHandler
Tipo de evento
Excepciones
No se admiten las notificaciones de eventos del sistema en el contexto actual. Los procesos del servidor, por ejemplo, quizá no admitan las notificaciones globales de eventos del sistema.
No se ha podido crear correctamente un subproceso de ventana de eventos del sistema.
Comentarios
Este evento se puede cancelar. Al establecer la Cancel propiedad en true
, se solicitará que la sesión continúe ejecutándose. No proporciona ninguna garantía de que la sesión no finalice.
Si usa SessionEnding en un formulario Windows Forms para detectar un inicio de sesión o reinicio del sistema, no hay ninguna manera determinista de decidir si el Closing evento se activará antes de este evento.
Si desea realizar algunas tareas especiales antes Closing de que se desencadene, debe asegurarse de que SessionEnding se activa antes Closingde . Para ello, debe interceptar en WM_QUERYENDSESSION
el formulario invalidando la WndProc
función . En este ejemplo se muestra cómo hacerlo.
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
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg==WM_QUERYENDSESSION)
{
MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
systemShutdown = true;
}
// If this is WM_QUERYENDSESSION, the closing event should be
// raised in the base WndProc.
base.WndProc(ref m);
} //WndProc
private void Form1_Closing(
System.Object sender,
System.ComponentModel.CancelEventArgs e)
{
if (systemShutdown)
// Reset the variable because the user might cancel the
// shutdown.
{
systemShutdown = false;
if (DialogResult.Yes==MessageBox.Show("My application",
"Do you want to save your work before logging off?",
MessageBoxButtons.YesNo))
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
}
Importante
Las aplicaciones de consola no generan el SessionEnding evento.
Nota
Este evento solo se genera si se está ejecutando la bomba de mensajes. En un servicio de Windows, a menos que se use un formulario oculto o se haya iniciado manualmente la bomba de mensajes, este evento no se generará. Para obtener un ejemplo de código que muestra cómo controlar eventos del sistema mediante un formulario oculto en un servicio de Windows, vea la SystemEvents clase .
Precaución
Dado que se trata de un evento estático, debe desasociar los controladores de eventos cuando se elimina la aplicación o se producirán pérdidas de memoria.