• ベストアンサー

別アプリの操作

こんにちは。 以前、このサイトで同じような質問があったのですが、 VB.NETで作成したPGから別アプリのボタンを押すには、ボタンのオブジェクトハンドルを 取得し、SendMessageで実現できるとありました。 その方法でボタンのハンドルまでは取得できたのですが、コントロールIDの取得で0が 返ってきました。 Spy++で見たところ、コントロールIDが0でした。 コントロールIDを使用せずにオブジェクトハンドルだけ?で別アプリのボタンを押すことは できるのでしょうか? ちなみに別アプリとはAcrobat9です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

> ボタンのオブジェクトハンドルを取得し、SendMessageで実現できるとありました。 ボタンのウインドウハンドルを取得して、SendMessageすればよい。 ウインドウハンドルを取得する方法として、コントロールIDで検索する方法があるが もちろん別の方法で取得してもよい。 > ちなみに別アプリとはAcrobat9です。 それなら、Acrobatオートメーションで制御するのがよい。

null-pointer
質問者

お礼

ありがとうございます。 > ボタンのウインドウハンドルを取得して、SendMessageすればよい。 > ウインドウハンドルを取得する方法として、コントロールIDで検索する方法があるが > もちろん別の方法で取得してもよい。 ウインドウハンドルは取得できているのですが、それだけでSendMessageを呼び出せるのでしょうか? 色々なサンプルを検索したのですがほとんどはGetDlgCtrlIDをSendMessageの第2引き数に使用 (BN_CLICK + GetDlgCtrlID(ウインドウハンドル)*&H10000 など)しています。 Spy++で見た時、同一ダイアログ上の全ボタンオブジェクトのコントロールIDが全て0だったので そのまま使用していいのかどうか判りませんでした。 > それなら、Acrobatオートメーションで制御するのがよい。 Acrobatオートメーションでそれらしいメソッドがありませんでした。 AcrobatJavaScriptにもありませんでした。 それで上記のような別アプリのボタンを押すようにしたいのです。 見落としていて実際には呼び出すメソッドが有ればいいのですが…。 すみません。 宜しくお願いします。

null-pointer
質問者

補足

コントロールIDが0でもそのままSendMessageでBN_CLICKEDを送れば問題なく動作しました。 ありがとうございました。

その他の回答 (1)

回答No.2

クリック動作をさせるのは BM_CLICK ですね。 http://msdn.microsoft.com/en-us/library/bb775985(v=vs.85).aspx BN_CLICK はクリックされたときに Windows からアプリケーションに通知されるメッセージです。

null-pointer
質問者

お礼

ありがとうございます。 対象コントロールが配置されているウィンドウをアクティブにしなければいけないようなのですが 幾つかの別のウィンドウを持ったPGが起動されており確実にアクティブになるかどうか判らないので うまくいく時といかない時がありました。

関連するQ&A