Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Tritt ein, wenn ein Benutzer versucht, sich abzumelden oder das System herunterzufahren.
Namespace: Microsoft.Win32
Assembly: System (in system.dll)
Syntax
'Declaration
Public Shared Event SessionEnding As SessionEndingEventHandler
'Usage
Dim handler As SessionEndingEventHandler
AddHandler SystemEvents.SessionEnding, handler
public static event SessionEndingEventHandler SessionEnding
public:
static event SessionEndingEventHandler^ SessionEnding {
void add (SessionEndingEventHandler^ value);
void remove (SessionEndingEventHandler^ value);
}
/** @event */
public static void add_SessionEnding (SessionEndingEventHandler value)
/** @event */
public static void remove_SessionEnding (SessionEndingEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.
Ausnahmen
| Ausnahmetyp | Bedingung |
|---|---|
Systemereignisbenachrichtigungen werden unter dem aktuellen Kontext nicht unterstützt. Beispielsweise unterstützen Serverprozesse möglicherweise keine globalen Systemereignisbenachrichtigungen. |
|
Beim Versuch, einen Thread für das Systemereignisfenster zu erstellen, ist ein Fehler aufgetreten. |
Hinweise
Ein Abbrechen dieses Ereignisses ist möglich. Durch Festlegen der Cancel-Eigenschaft auf false wird die Fortsetzung der Sitzung angefordert. Dies garantiert jedoch nicht, dass die Sitzung nicht beendet wird.
Wenn Sie SessionEnding in einem Windows-Formular verwenden, um eine Systemabmeldung oder einen Neustart zu erkennen, besteht keine Möglichkeit, mit der deterministisch festgestellt werden kann, ob das Closing-Ereignis vor diesem Ereignis ausgelöst wird.
Wenn bestimmte Tasks vor dem Auslösen von Closing ausgeführt werden sollen, müssen Sie sicherstellen, dass SessionEnding vor Closing ausgelöst wird. Zu diesem Zweck müssen Sie WM_QUERYENDSESSION im Formular abfangen, indem Sie die WndProc-Funktion überschreiben.
Wichtig
Konsolenanwendungen lösen das SessionEnding-Ereignis nicht aus.
Warnung
Da es sich um ein statisches Ereignis handelt, müssen Sie beim Freigeben der Anwendung die Anbindung der Ereignishandler trennen. Andernfalls treten Speicherverluste auf.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie WM_QUERYENDSESSION im Formular durch deterministisches Überschreiben der WndProc-Funktion abgefangen wird.
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 (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(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;
}
}
}
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
SystemEvents-Klasse
SystemEvents-Member
Microsoft.Win32-Namespace
SessionEndingEventArgs-Klasse
SessionEndingEventHandler-Delegat
SessionEndReasons-Enumeration