SystemEvents.SessionEndingイベントにより、ユーザーがシステムからログオフしようとしている、またはシステムをシャットダウンしようとしたことを知ることができます。またこのとき受け取るSessionEndingEventArgs型の引数のCancelプロパティをTrueにすることにより、セッションの終了要求をキャンセルできます。しかしこのときでも絶対にキャンセルされるというわけではありません。
'Imports Microsoft.Win32 'がソースファイルの一番上に書かれているものとする。 'ログオフ、シャットダウンの通知 Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load 'イベントをイベントハンドラに関連付ける 'フォームコンストラクタなどの適当な位置に記述してもよい AddHandler SystemEvents.SessionEnding, _ AddressOf SystemEvents_SessionEnding End Sub Private Sub Form1_Closed(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Closed 'イベントを解放する 'フォームDisposeメソッド内の基本クラスのDisposeメソッド呼び出しの前に '記述してもよい RemoveHandler SystemEvents.SessionEnding, _ AddressOf SystemEvents_SessionEnding End Sub 'ログオフ、シャットダウンしようとしているとき Private Sub SystemEvents_SessionEnding( _ ByVal sender As Object, _ ByVal e As SessionEndingEventArgs) Dim s As String If e.Reason = SessionEndReasons.Logoff Then s = "ログオフしようとしています。" ElseIf e.Reason = SessionEndReasons.SystemShutdown Then s = "シャットダウンしようとしています。" End If If MessageBox.Show(s + vbNewLine + "キャンセルしますか?", _ "質問", MessageBoxButtons.YesNo) = DialogResult.Yes Then 'キャンセルする e.Cancel = True End If End Sub
//using Microsoft.Win32; //がソースファイルの一番上に書かれているものとする。 //ログオフ、シャットダウンの通知 private void Form1_Load(object sender, System.EventArgs e) { //イベントをイベントハンドラに関連付ける //フォームコンストラクタなどの適当な位置に記述してもよい SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding); } private void Form1_Closed(object sender, System.EventArgs e) { //イベントを解放する //フォームDisposeメソッド内の基本クラスのDisposeメソッド呼び出しの前に //記述してもよい SystemEvents.SessionEnding -= new SessionEndingEventHandler(SystemEvents_SessionEnding); } //ログオフ、シャットダウンしようとしているとき private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) { string s = ""; if (e.Reason == SessionEndReasons.Logoff) { s = "ログオフしようとしています。"; } else if (e.Reason == SessionEndReasons.SystemShutdown) { s = "シャットダウンしようとしています。"; } if (MessageBox.Show(s + "\n\nキャンセルしますか?", "質問", MessageBoxButtons.YesNo) == DialogResult.Yes) { //キャンセルする e.Cancel = true; } }
SystemEvents.SessionEndedイベントは、ユーザーがシステムからログオフするか、システムをシャットダウンすると発生します。
また、SystemEventsクラスはその他にも、様々なシステムイベントを提供します。詳しくは、こちらをご覧ください。