• ベストアンサー

別アプリの操作

こんにちは。 以前、このサイトで同じような質問があったのですが、 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

  • 他のデスクトップアプリのデータを取得したい

    VB.NET2003開発環境を持っています。 他の人が開発した、Windowsデスクトップアプリのラベル・テキストボックス・コンボボックス等のコントロール名とプロパティを取得したり、値を送る方法を調べています。 SendMessageとかAPIとかSpy++とか色々出てきたのですが、解決には至りません。 本屋などで書籍も見たんですが、欲しい機能はのっていません。 解決のヒントを頂きたいです。

  • APIを使用して別プログラムを印刷

    VBよりPowerPointのウィンドウハンドルを取得し、SendMessageなどで印刷を開始したいと思っています。 PowerPointはツールバー・メニューバーが無効となっており、CTRL+Pも使用できません。メッセージを直接送ればできるのではないかと目論んでいます。 SendMessage以外でも良いのですが、VBよりPowerPointの印刷を開始する方法はないものでしょうか。

  • 他のアプリの表示、非表示について

    他のアプリケーション(アプリA)をコントロールするプログラムを作っています。アプリAと自作アプリは起動したままです。自作アプリでボタンを押すとアプリAを表示させてアクティブにして仕事をさせ、終わったら非表示にします。 アプリAのハンドルをhandle = FindWindow()で取得して ShowWindow(handle,SW_SHOWNORMAL)で表示して、 ShowWindow(handle,SW_HIDE);で隠しています。 ボタンを押したときに、アプリAが表示されていると、非表示にしたあとタスクバーのアプリを手動で表示できません。 MINIMIZEやCloseWindos()も試しましたが、それだと画面の左下にアプリAが残ってしまいます。 SendMessage(handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);も試しましたがうまくいきません。使い方が悪いのかもしれません。 アプリAを隠す事と元のサイズで表示する。という二つの動作をプログラムで交互に行う場合に、途中で手動でアプリAの最小化、あるいはタスクバーから出すという動作をさせることができるのが希望です。どうすればよいでしょうか。 OSはXPです。

  • 他のアプリケーションを操作

    他人の作ったアプリケーションを何とか操作したのですが、何か方法はありませんか? ちなみに、「Spy++」ツールを使って対象アプリのウィンドウハンドルを確認して見たのですが、そのアプリ画面にある各種コントロールが子ウィンドウとして確認できません。 操作したいアプリが「LabView」で作られているっぽいです。 (NIのMeasurementStadioのコントロールがたくさんあります。勝手な推測ですが、、、) WINAPIを駆使すれば、実現できそうな感じはあるのですが、私の力ではこれ以上前に進めなくなってしまいました。 回答を宜しくお願いします。

  • VBアプリからID,パスワード入力できるでしょうか。

    こんなことができるかどうかわかりませんが、実現可否を含めておわかりになる方がいらっしゃったら、方法等、アドバイスいただけますでしょうか。 WEBサイトへのログイン時にベーシック認証が使用されている場合、IDとパスワードを入力するダイアログが表示されますが、このIDとパスワードの入力をキーボードからではなく、VBアプリから入力することはできないでしょうか。 イメージとしては、 (1)あらかじめVBアプリにIDとパスワードを持たせておく。 (2)ベーシック認証のダイアログが表示されたときに、VBアプリのボタンを押す。 (3)ダイアログの各入力欄にIDとパスワードが入力される。 (4)ダイアログのOKボタンを押して、ログイン 以上、よろしくお願い致します。

  • 他アプリの操作(メニューバー)

    市販されているアプリケーションを自分で作成しているソフトで操作したいのですが、どの様に制御したらいいのか判りません。プログラムはVB6.0で作成しております。 したい事は他のアプリケーションでメニューバーの中の項目の 印刷項目を選択したいのですが、メニューバーのハンドルを取得 出来ず困っております。 そもそもメニューバーのハンドルって取得できるのでしょうか?

  • 他のアプリケーションの操作について

    こんにちは。 現在、WindowsXP、Visual Studio2005(以下VS)にて既存のアプリケーションの操作を行うツールを作成しようとしています。 Findwindow関数で親のハンドルをとり、EnumChildWindow関数でコントロールのハンドルを取得しましたが、操作したいボタンの情報が取れません。 参考にさせていただいたコードは以下です。 http://blog.goo.ne.jp/masaki_goo_2006/e/cea1b601e33fb7a344ecba2ee972efe4 VS付属spy++の調査も同様の結果で、そのボタンの情報が出てきませんでした。 コントロールの情報がとれないという事はあるのでしょうか? ちなみにボタンはtoolbarの上にありtoolbarの情報は取れています。 情報が取れない場合、操作は出来ないということでしょうか?

  • ブラウザのテキストボックスへの入力

    WEBブラウザにHTMLで構成されているテキストボックスにVBプログラムから文字列を入力することができますでしょうか。 イメージとしては、ブラウザにHTML表示されたID,パスワード欄にVBプログラムから入力を行い、同じくHTMLのsubmitボタンをVBから押下するという感じです。 また、可能である場合、具体的にどのようにすればできるか、参考情報、サイト等教えていただけませんでしょうか。 ベーシック認証時などにポップアップ表示されるダイアログへのID/パスワードなどの入力プログラムを以前作成した際は、ウィンドウハンドルを取得して、sendmessageすることができたのですが、HTMLの部品はウィンドウハンドルで特定することができないので、苦慮しています。 以上、よろしくお願い致します。

  • 応答なしアプリの強制終了方法

    やりたいことは、なんらかの理由で「応答なし」になったアプリケーションを別プログラムから強制終了させたい。 タスクマネージャのプロセスの終了を実現したいです。 SendMessageやPostMessageでWM_CLOSEを送っても「応答なし」アプリだと終了してくれません。 どのように実現可能でしょうか? 開発環境は、下記です。 OS:Windows2000SP4 VB6SP5

  • VB6.0で外部アプリの値を取得したい

    VB6.0で外部アプリケーションのエディトエディトボックスに書かれている値を取得したいのですが、どのように取得したらわからず困っております。 外部アプリケーションのハンドルIDも、その中にあるエディトボックスのハンドルIDも取得できたのですがその値を取得する方法を調べておりますが、よくわかりません。判る方いらっしゃいましたら教えて下さい。