● Windows終了ダイアログ ●

ランチャーなどに組み込んでみてはいかが?

やり方は2つある。どちらもAPI関数を使用する。後者のやり方の方が正当かな。

Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal YourGuess As Long) As Long

Private Sub Command1_Click()
    Call SHShutDownDialog(0&)
End Sub

SHShutDownDialog 関数が16を返したら、エラーという噂もある。また、引数 YourGuess は何を意味するかは不明。0を送ればよいみたい?取りあえず、1つ目の方法はこれで終わり。

2つ目は、タスクバーのウインドウハンドルを取得し、メッセージキューへ"WM_CLOSE"メッセージを投函してやればよい。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_CLOSE = &H10

'-------------------------------------------------------------------
' 関数名 : ShowWinBootDialog
' 機能 : Windows 終了のダイアログを表示する
' 引数 : なし
' 返り値 : なし
'-------------------------------------------------------------------
Public Sub ShowWinBootDialog()

    Dim hWndTaskBar As Long

     'タスクバーのハンドルを取得する
    hWndTaskBar = FindWindow("Shell_TrayWnd", vbNullString)

    If hWndTaskBar <> 0 Then
        Call PostMessage(hWndTaskBar, WM_CLOSE, 0, 0)
    End If

End Sub


戻る