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
プレビュー