140.アプリケーション(ウインドウ)の強制終了方法
< 使用用途 >
アプリケーションの強制終了が出来る。
今回のサンプルソースをダウンロードする方は下記の「ダウンロード」を!
=> ダウンロード・・・ 下に書いてあるサンプルソースと同じです
< 説明 >
API関数のPostMessage(強制終了)、FindWindow(ウィンドウの検索)を使用します。
PostMessage=>ウインドウのメッセージキューにメッセージを送る
<引数>
hWnd :指定するウインドウのハンドル
wMsg :メッセージのタイプ゚
wParam:wMsg と一緒に送る値
lParam :wMsg と一緒に送る値
@戻り値@
指定メッセージにより異なる
FindWindow=>クラス名かタイトルがあるウインドウのハンドルを取得する
<引数>
lpClassName :クラス名(名前を指定する時合はvbNullString)
lpWindowName:取得したいハンドルのウインドウタイトル(クラス名を取得時はvbNullString)
@戻り値@
0 :エラー(見つからない時)
以外:正常終了(ハンドル)
※これ以外のAPIもサンプルでは使用していますが、ここでは省略します。
これらのAPIも見たい人はここへ1、ここへ2
< SAMPLE >
’標準モジュール
' ウインドウの検索
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
' アプリの強制終了
Public 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
’ここから下はフォーム内の処理です。フォームにリストボックス、
’コマンドボタンを’2つ貼りつけた状態です。ここでは強制終了の
’部分しか記載していません。詳しくはダウンロードして見て下さい
Private Sub Command1_Click()
Dim lRet As Long
Dim sTitle As String
If List1.ListIndex = -1 Then
MsgBox "リストから強制終了するアプリケーションを選択してください"
Exit Sub
End If
sTitle = List1.List(List1.ListIndex)
On Error GoTo ErrFunc:
'リスト項目の削除
List1.RemoveItem (List1.ListIndex)
'ウィンドウのハンドルを取得
lRet = FindWindow(vbNullString, sTitle)
'取得したウインドウハンドルをもつアプリケーションに終了要求のメッセージを送る
'SendMessageでも可(割り込み実行が出来る)
Call PostMessage(lRet, WM_QUIT, 0, 0)
Exit Sub
ErrFunc:
' 注:エラートラップ出来ない事も有り(自アプリ選択等)
' お願い:回避方法を知っている方、メールで教えてください。
MsgBox "強制終了は失敗しました"
End Sub
以下、省略