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

以下、省略





API 技術関連のページへ戻る

ホーム PV ランキング