開いているウィンドウに対して直接メッセージを送信してアプリケーションを終了させるWindowsAPI関数(SendMessage)について紹介します。
構文
記述方法は以下の通りとなります。
(API定義)
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
----------------------------------------
(定数)
Public Const メッセージ = &H112
Public Const ウィンドウ終了 = &HF060&
----------------------------------------
(VBA記述)
SendMessage(hWnd, MSG, wParam, lParam)
[説明]:
ウィンドウに直接メッセージを送信するAPI関数はSendMessage関数となります。VBAから呼び出して使用する場合には、
---------------------------------
・定義
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
・定数
Public Const メッセージ = &H112
Public Const ウィンドウ終了 = &HF060&
---------------------------------
をプロシージャ外で宣言します。
引数であるhWndにはメッセージを送信したいウィンドウハンドルを指定し、MSGにはメッセージの種類を指定し、wParamやlParamにはメッセージの内容を指定します。MSGについては定数で記述した「メッセージ種類」をセットし、wParamに定数で記述した「ウィンドウ終了」をセットします。SendMessage関数を実行すると戻り値が返りますが、送信するメッセージの種類により異なった内容となります。
使い方
使用方法について説明します。
[プログラミング例]:
'*------------------------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'*------------------------------------------
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const メッセージ = &H112
Public Const ウィンドウ終了 = &HF060&
'*------------------------------------------
Sub ウィンドウに直接メッセージを送信して特定アプリケーションを閉じる()
'↓処理①
Dim ウィンドウ As Long
Dim 結果値 As Long
'↓処理②
ウィンドウ = FindWindow("Notepad", vbNullString)
If (ウィンドウ = 0) Then
MsgBox "メモ帳は起動されていません。"
Exit Sub
Else
結果値 = SendMessage(ウィンドウ, メッセージ, ウィンドウ終了, 0)
MsgBox "メモ帳を閉じました。(結果値:" & 結果値 & ")"
End If
End Sub
処理の流れは以下の通りとなります。
[処理①]:変数定義
ウィンドウと結果値を格納する変数定義となります。
[処理②]:SendMessageによる直接メッセージの送信
WindowsAPI関数であるSendMessageを使用したウィンドウに直接メッセージを送信する方法となります。各引数には以下の内容をセットして処理を実行します。
・hWnd・・・ウィンドウハンドルをセットします。
※今回はFindWindow関数の戻り値である変数:ウィンドウをセットします。
・MSG・・・メッセージの種類をセットします。
※定数で指定した「メッセージ」をセットします。
・wParam・・・メッセージの内容をセットします。
※定数で指定した「ウィンドウ終了」をセットします。
・lParam・・・メッセージの内容をセットします。
※今回は指定しないため「0」をセットします。
実行すると戻り値が返りますが、送信するメッセージの種類により異なった内容となります。
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。
[実行例]:
(事前準備)
事前にメモ帳を開きます。(※タスクバーを確認するとメモ帳が起動している事がわかります。)
①<実行>ボタンをクリックします。
②MsgBoxで「メモ帳を閉じました。(結果値:0)」が表示されます。
③タスクバーを確認するとメモ帳が閉じた事がわかります。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
ウィンドウに直接メッセージを送信する方法についての説明は以上です。
おわりに
今回はWindowsAPI関数によるウィンドウに直接メッセージを送信する方法について説明しました。是非参考にして下さい。