タイトル | : OSをログオフまたはシャットダウンをキャンセルした場合、APを終了しないようにするには? |
記事No | : 537 |
投稿日 | : 2003/11/06(Thu) 19:23 |
投稿者 | : masat21 |
[OSのVer]:Windows 2000 [VBのVer]:VB.NET
masat21です。 まずは例をご覧ください。
'例1:Module1.vb Public Sub main()
'パラメタの初期化処理
(中略)
'メイン画面を表示します。 Application.Run(frm1) End Sub
'例2:Form1.vb '下記の例はhhttp://dobon.net/vb/dotnet/system/sessionending.htmlより引用 [VB.NET] 'ログオフ、シャットダウンの通知
'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
上記例において、ログオフまたはシャットダウンをキャンセルした場合e.Cancel = True にしたあと、フォームを閉じないようにDialogMe.DialogResult = DialogResult.None としましたが、キャンセルが無効になってAPとOSが終了します。 キャンセルを有効にしてAPとOSを終了させない方法についてご教示願います。
ちなみに、ログオフまたはシャットダウンする場合は、OSが終了する前にAPを終了させる メソッドApplication.Exit()を発行しています。
|