Microsoft 製品に組み込まれている Visual Basic の実装。
こんにちは。
どういったアプリケーションのどういったボタンをクリックしようとしているのかが分からないので何とも言えませんが、サンプルとしては下記のような感じでしょうか。
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hParent As Long, ByVal hChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const BN_CLICKED = 0&
Private Const WM_COMMAND = &H111&
Public Sub Sample()
'Windows 7(x64)で電卓の「16進」ボタンをクリック
Dim hCalcFrame As Long
Dim hDlg As Long
Dim hBtn As Long
Const CtrlID = &H139& '16進ボタンのID
Shell "calc"
If MsgBox("電卓は起動しましたか?", vbYesNo) = vbNo Then Exit Sub
hCalcFrame = FindWindow("CalcFrame", vbNullString)
hCalcFrame = FindWindowEx(hCalcFrame, 0&, "CalcFrame", vbNullString)
If hCalcFrame = 0& Then Exit Sub
hDlg = FindWindowEx(hCalcFrame, 0&, "#32770", vbNullString)
hDlg = FindWindowEx(hCalcFrame, hDlg, "#32770", vbNullString)
If hDlg = 0& Then Exit Sub
hBtn = GetDlgItem(hDlg, CtrlID)
If hBtn = 0& Then Exit Sub
SendMessage hDlg, WM_COMMAND, BN_CLICKED * &H10000 + CtrlID, hBtn
End Sub
> lngRtn = SendMessage(lngTB, WM_SETTEXT, 0, ByVal strID)
WM_SETTEXTはSendMessage専用です。
> Buttonを操作する場合は前記のようにPostMessageを使用することになっているようです。
ボタンだからPostMessage、というのはちょっと違うと思いますが、このあたりの使い分けは「SendMessage PostMessage 違い」「SendMessage PostMessage 使い分け」といったキーワードで検索すれば参考になる情報が出てくるかと思います。
どのみちWindows APIの話となるとVBAの範疇を超えていますので、Officeフォーラムよりも開発者向けフォーラムの方が良いかもしれませんね。