API宣言
WindowsAPI(関数)を使うためには、事前に宣言が必要となります。
Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
解説
この宣言では、SendMessage関数(ウィンドウに直接メッセージを送信)が使用できる様になります。この関数ではメッセージを指定する必要があります。以下に幾つか代表的なメッセージの種類を紹介しておきます。
メッセージ名 | 値(16進数) | 説明 |
WM_CLOSE | &H10 | ウィンドウを閉じます。 |
WM_SETTEXT | &HC | ウィンドウのテキスト(タイトル)を設定します。 |
WM_GETTEXT | &HD | ウィンドウのテキスト(タイトル)を取得します。 |
WM_ENABLE | &HA | ウィンドウを有効または無効にします。 |
WM_QUIT | &H12 | アプリケーションを終了します。 |
プログラミング例
具体的なプログラミング例を紹介します。
Sub ウィンドウを閉じる()
Dim ウィンドウ識別子 As Long
Dim メッセージの種類 As Long
Dim 結果 As Long
' メモ帳(notepad)のウィンドウ識別子を取得する
ウィンドウ識別子 = FindWindow("Notepad", vbNullString)
' WM_CLOSE(ウィンドウを閉じるメッセージ)
メッセージの種類 = &H10
' ウィンドウを閉じるメッセージを送る
結果 = SendMessage(ウィンドウ識別子, メッセージの種類, 0, 0)
If 結果 = 0 Then
MsgBox "ウィンドウを閉じました。"
Else
MsgBox "ウィンドウを閉じることができませんでした。"
End If
End Sub
Dim ウィンドウ識別子 As Long
Dim メッセージの種類 As Long
Dim 結果 As Long
' メモ帳(notepad)のウィンドウ識別子を取得する
ウィンドウ識別子 = FindWindow("Notepad", vbNullString)
' WM_CLOSE(ウィンドウを閉じるメッセージ)
メッセージの種類 = &H10
' ウィンドウを閉じるメッセージを送る
結果 = SendMessage(ウィンドウ識別子, メッセージの種類, 0, 0)
If 結果 = 0 Then
MsgBox "ウィンドウを閉じました。"
Else
MsgBox "ウィンドウを閉じることができませんでした。"
End If
End Sub
上記のプログラムは、メモ帳を閉じるメッセージを送信する内容です。ウィンドウハンドル(ウィンドウ識別子)の取得方法については、こちらのサイトも参考にして下さい。
まとめ
WindowsAPI関数:SendMessageを使用し、ウィンドウに直接メッセージを送信する方法について紹介しました。