- ベストアンサー
別アプリの操作
こんにちは。 以前、このサイトで同じような質問があったのですが、 VB.NETで作成したPGから別アプリのボタンを押すには、ボタンのオブジェクトハンドルを 取得し、SendMessageで実現できるとありました。 その方法でボタンのハンドルまでは取得できたのですが、コントロールIDの取得で0が 返ってきました。 Spy++で見たところ、コントロールIDが0でした。 コントロールIDを使用せずにオブジェクトハンドルだけ?で別アプリのボタンを押すことは できるのでしょうか? ちなみに別アプリとはAcrobat9です。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ボタンのオブジェクトハンドルを取得し、SendMessageで実現できるとありました。 ボタンのウインドウハンドルを取得して、SendMessageすればよい。 ウインドウハンドルを取得する方法として、コントロールIDで検索する方法があるが もちろん別の方法で取得してもよい。 > ちなみに別アプリとはAcrobat9です。 それなら、Acrobatオートメーションで制御するのがよい。
その他の回答 (1)
- tsukasa-12r
- ベストアンサー率65% (358/549)
回答No.2
クリック動作をさせるのは BM_CLICK ですね。 http://msdn.microsoft.com/en-us/library/bb775985(v=vs.85).aspx BN_CLICK はクリックされたときに Windows からアプリケーションに通知されるメッセージです。
質問者
お礼
ありがとうございます。 対象コントロールが配置されているウィンドウをアクティブにしなければいけないようなのですが 幾つかの別のウィンドウを持ったPGが起動されており確実にアクティブになるかどうか判らないので うまくいく時といかない時がありました。
お礼
ありがとうございます。 > ボタンのウインドウハンドルを取得して、SendMessageすればよい。 > ウインドウハンドルを取得する方法として、コントロールIDで検索する方法があるが > もちろん別の方法で取得してもよい。 ウインドウハンドルは取得できているのですが、それだけでSendMessageを呼び出せるのでしょうか? 色々なサンプルを検索したのですがほとんどはGetDlgCtrlIDをSendMessageの第2引き数に使用 (BN_CLICK + GetDlgCtrlID(ウインドウハンドル)*&H10000 など)しています。 Spy++で見た時、同一ダイアログ上の全ボタンオブジェクトのコントロールIDが全て0だったので そのまま使用していいのかどうか判りませんでした。 > それなら、Acrobatオートメーションで制御するのがよい。 Acrobatオートメーションでそれらしいメソッドがありませんでした。 AcrobatJavaScriptにもありませんでした。 それで上記のような別アプリのボタンを押すようにしたいのです。 見落としていて実際には呼び出すメソッドが有ればいいのですが…。 すみません。 宜しくお願いします。
補足
コントロールIDが0でもそのままSendMessageでBN_CLICKEDを送れば問題なく動作しました。 ありがとうございました。