SystemEvents.SessionEnding イベント
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ユーザーがシステムからログオフしようとした場合、またはシステムをシャットダウンしようとした場合に発生します。
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
イベントの種類
例外
システム イベント通知は、現在のコンテキストではサポートされていません。 たとえば、サーバー プロセスがグローバル システム イベント通知をサポートしていない可能性があります。
システム イベント ウィンドウ スレッドの作成が成功しませんでした。
注釈
これは取り消し可能なイベントです。 プロパティを Cancel に true
設定すると、セッションの実行が続行されます。 セッションが終了しないという保証はありません。
Windows フォームで を使用 SessionEnding してシステムのログオフまたは再起動を検出する場合、このイベントの前にイベントが Closing 発生するかどうかを決定する決定的な方法はありません。
が発生する前Closingにいくつかの特別なタスクを実行する場合は、 の前Closingにが発生していることをSessionEnding確認する必要があります。 これを行うには、 関数をオーバーライドして フォーム内の を WM_QUERYENDSESSION
トラップする WndProc
必要があります。 この例では、これを行う方法を示します。
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;
}
}
}
重要
コンソール アプリケーションでは、イベントは SessionEnding 発生しません。
注意
このイベントは、メッセージ ポンプが実行されている場合にのみ発生します。 Windows サービスでは、非表示のフォームが使用されているか、メッセージ ポンプが手動で開始されていない限り、このイベントは発生しません。 Windows サービスで非表示のフォームを使用してシステム イベントを処理する方法を示すコード例については、 クラスを SystemEvents 参照してください。
注意事項
これは静的イベントであるため、アプリケーションが破棄されるときにイベント ハンドラーをデタッチする必要があります。または、メモリ リークが発生します。
適用対象
こちらもご覧ください
.NET