tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルOSをログオフまたはシャットダウンをキャンセルした場合、APを終了しないようにするには?
記事No537
投稿日: 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()を発行しています。

[ツリー表示へ]