質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

解決済

WinMergeをWinAPIで操作

ExcelVBAer
ExcelVBAer

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

1回答

0評価

2クリップ

107閲覧

投稿2019/04/03 08:50

編集2022/01/12 10:58

ExcelVBAの修正前後で、ソースの差異を検証する為に、
WinMergeを使っており、一部の操作を自動化したく、
現在、修正前、修正後で、各ソースをフォルダにエクスポートし、
WinMergeに各フォルダのパスを渡し、
比較結果を、Htmlレポートで出力しています。
※WinMergeのツール → レポートの生成 → フォルダ比較レポート

このWinMergeの操作で、
「ツール(T)」を押下、
「レポート作成(R)」を押下
をSendKeyで操作している為に、
他の作業をしているとエラーになってしまいます。

そこで、ユーザー作業の影響を受けないよう、
Window Message 等で直接操作したく、
Menuのハンドルを取得し、
ツール(T) のIDを取得し、
PostMessage で WM_Command を送る等を試みたのですが、
自分では解決できず、
どなたか、解決の糸口、ヒント等をご教示頂けましたら、
大変助かります。

※IAccessible では実現できない事も判明しています。。。

どうぞ宜しくお願い致します。

<実現イメージ>
イメージ説明

VBA

Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long 'メイン部分のみですが、取り急ぎご参考まで... Private Function prWinMerge操作() 'WinMergeのウィンドウハンドルを取得 Dim hWinMerge As Long hWinMerge = fWinHnd_Window_Find(, "WinMergeWindowClassW") If hWinMerge = 0 Then Exit Function 'アクティブなスレッドにアタッチして、ウィンドウをアクティブ化 Call fWinHnd_Activate(hWinMerge) 'メニュ-のハンドルを取得 Dim hMenu As Long hMenu = GetMenu(hWinMerge) 'メニューの「ツール(T)」のハンドルを取得 Dim hSubMenu As Long hSubMenu = GetSubMenu(hMenu, 6) 'メニューの「ツール(T)」ボタン押下 ⇒ 押下状態にならない... Call PostMessage(hWinMerge, WM_COMMAND, hSubMenu, 0&) '押下できたか、少し待つ Call fApp_Wait(1) '押下できていたら、更に「レポート作成(R)」ボタン押下 End Function

<追記>
SPY++で「レポート(R)」押下時のWM_COMMANDを確認
イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

atata0319
atata0319

2019/04/03 09:27 編集

逆に現在SendKeysを使用しているコードを記載いただいた方が回答しやすいかもしれません。
m.ts10806
m.ts10806

2019/04/03 09:37

SVN入れたほうがいいような
ExcelVBAer
ExcelVBAer

2019/04/04 00:00

クローズドな環境なもので、他のソフトをイストールできず...
m.ts10806
m.ts10806

2019/04/04 00:06

んーなるほど了解です

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。