ExcelVBAの修正前後で、ソースの差異を検証する為に、
WinMergeを使っており、一部の操作を自動化したく、
現在、修正前、修正後で、各ソースをフォルダにエクスポートし、
WinMergeに各フォルダのパスを渡し、
比較結果を、Htmlレポートで出力しています。
※WinMergeのツール → レポートの生成 → フォルダ比較レポート
このWinMergeの操作で、
「ツール(T)」を押下、
「レポート作成(R)」を押下
をSendKeyで操作している為に、
他の作業をしているとエラーになってしまいます。
そこで、ユーザー作業の影響を受けないよう、
Window Message 等で直接操作したく、
Menuのハンドルを取得し、
ツール(T) のIDを取得し、
PostMessage で WM_Command を送る等を試みたのですが、
自分では解決できず、
どなたか、解決の糸口、ヒント等をご教示頂けましたら、
大変助かります。
※IAccessible では実現できない事も判明しています。。。
どうぞ宜しくお願い致します。
VBA
1Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long 2Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long 3 4'メイン部分のみですが、取り急ぎご参考まで... 5Private Function prWinMerge操作() 6 7 'WinMergeのウィンドウハンドルを取得 8 Dim hWinMerge As Long 9 hWinMerge = fWinHnd_Window_Find(, "WinMergeWindowClassW") 10 If hWinMerge = 0 Then Exit Function 11 12 'アクティブなスレッドにアタッチして、ウィンドウをアクティブ化 13 Call fWinHnd_Activate(hWinMerge) 14 15 'メニュ-のハンドルを取得 16 Dim hMenu As Long 17 hMenu = GetMenu(hWinMerge) 18 19 'メニューの「ツール(T)」のハンドルを取得 20 Dim hSubMenu As Long 21 hSubMenu = GetSubMenu(hMenu, 6) 22 23 'メニューの「ツール(T)」ボタン押下 ⇒ 押下状態にならない... 24 Call PostMessage(hWinMerge, WM_COMMAND, hSubMenu, 0&) 25 26 '押下できたか、少し待つ 27 Call fApp_Wait(1) 28 29 '押下できていたら、更に「レポート作成(R)」ボタン押下 30 31 32End Function
<追記>
SPY++で「レポート(R)」押下時のWM_COMMANDを確認
VBA
1'修正版のコード 2Private Function prWinMerge操作() 3 4 'WinMergeのウィンドウハンドルを取得 5 Dim hWinMerge As Long 6 hWinMerge = fWinHnd_Window_Find(, "WinMergeWindowClassW") 7 If hWinMerge = 0 Then Exit Function 8 9 '「レポート(R)」を押下 10 Const wID As Long = 32868 11 Call PostMessage(hWinMerge, WM_COMMAND, wID, 0&) 12 13End Function
回答1件
あなたの回答
tips
プレビュー