• 締切済み

FinderSystem等のツールで取得できないハンドルを取得するには?

他のアプリケーションのボタンで操作したいと思い FinderSystemやNuke++等のツールを使いウィンドウハンドルを調べ SendMessage関数を使ってコマンドボタンのクリックをする所までは できるのですが、ツール等でウィンドウハンドルを取得できないラベル トグルボタンが存在し、画面上では明らかに存在しているのですが そのボタンには反応せず、大きな枠組みでウィンドウハンドルを 取得してしまいます。FindWindow、FindWindowEx、GetWindow EnumChildWindowで子ウィンドウのハンドルまで調べたのですが 値が0になってしまいます。他にもボタンだけではなく タブコントロールも操作したいと思っているのですが 同様に子ウィンドウハンドルの値は0になってしまいます そもそもウィンドウハンドルを全て取得することは不可能なのでしょうか? いろいろな他のアプリケーションのコマンドボタンをFinderSystemで調べて 取得できる場合とできない場合があり、この差は何なのか 疑問に思っています。ご存知のお方がいれば お手数ですが教えていただけないでしょうか? 開発環境は、WindowsXP、VB6.0です。 宜しくお願いいたします。

みんなの回答

回答No.1

>FinderSystem/Nuke++を使いウィンドウハンドルを調べ ウィンドウハンドル = 「窓管理ID」です。 >FindWindow/FindWindowEx/GetWindow/EnumChildWindow いずれも「窓管理ID」取得APIです。 >画面上では明らかに存在しているのですがそのボタンには反応せず、大きな枠組みでウィンドウハンドルを取得してしまいます 単純に、「窓管理ID」を持たないからです。 どのようなアプリを制御しようとしているのかわかりませんが、VB6製であれば、ラベルは窓を調査するツールからの取得は不可能です。 ラベルは、デザイン時ではオブジェクトとして操作していますが、Exeになるとそのラベルの母体となる親窓に描かれた絵でしかありません。なのでハンドルを持ちません。 [ラベルオブジェクト].hWndプロパティが存在しないのは、VB側に用意されていないだけではなく、用意できないからです。 どうしてもクリックイベントを走らせたいのであれば、座標でAPIのmouse_eventを実行するしかありません。 VBのSendKeysもどきで、動作保障できるシロモノではないですが、、、

関連するQ&A

  • ウィンドウハンドルの取得方法

    ダイアログの表示されないEXEを起動させて、FindWindowを使用してそのEXEのウィンドウハンドルを取得したいのですが上手くいきません・・。 FindWindowの第一引数は「ウィンドウのクラス名」を指定するようなのですが、「ウィンドウのクラス名」の意味が良くわかりません。第二引数は「ウィンドウ名」を指定するようなのですが、今回のようなアンダーグラウンドで動くEXEには「ウィンドウ名」は無いと思ってよいのでしょうか? ちなみにダイアログのあるEXEならウィンドウハンドルを取得できます。 お分かりの方がいらっしゃれば、ご教授願います。

  • C++ 子ウィンドウのハンドルを取得したいのですが

    C++で別ウィンドウのアプリケーションを動かすというものを作っているのですが、そのウィンドウの子ウィンドウのハンドルを取得するのに困ったことがあるのでアドバイスをいただけると大変ありがたいです。 基本的にSPY++というソフトを使ってウィンドウ名その他を探し、FindWindowExまたはGetDlgItem関数を使って取得という方法をとっているのですが、クラス名、ウィンドウ名が全く同じもので、コントロールIDも0という状態のものがあり、片方を取得したい場合どうしたらよいのかという状態です。 知人にSPY++でみて上から何番目にあるやつと指定して得ることができる方法があるかもしれないと聞いたのですが、よくわかりません。 例としてその画像ものせますので、良い知恵がありましたらお貸しください。

  • javaプログラムから他のjavaプログラムを操作

    javaのプログラムから他のjavaプログラムを操作するにはどのようにすればいいのでしょうか? 他の方が作った既存のjavaプログラムのウィンドウ内のリストビューの項目を自動的に選択したり、エディットビューの表示文字列をクリップボードにコピーしたいと思っています。 Windowsネイティブプログラムから他のWindowsネイティブプログラムを操作する場合は、FindWindowで親ウィンドウのウィンドウハンドルを取得し、そこからFindWindowExで子ウィンドウのハンドルを取得してサブクラス化するそうですが、javaではどうやるのかが知りたいです。 また、子ウィンドウのハンドルを得るために子ウィンドウを特定するための情報(Windowsネイティブプログラムなら、FindWindowExに引数として渡す「GetClassNameで得られるクラス名」)はどのようにすれば調べられるのでしょうか(EnumChildWindows、GetClassNameなどに該当するメンバ関数はあるのでしょうか)?

    • ベストアンサー
    • Java
  • ウインドウハンドルのつかみ方について質問です。

    visualbasic6.0で開発をしています。 例えば、同親内の子コントロールに同じ「edit」クラスが2つ存在していたとします。 私は、ハンドルを掴むのにクラス名とキャプション名で掴んでいます。 しかし、クラス名は一緒で、キャプション名は存在しません。 すると、2つのコントロールを区別することができません。 現在は、FindWindowExで取得したハンドルを、アプリケーション「spy」等であっているか確認しています。 上記のような、クラス名とキャプションで判断できないものは、皆さんどのようにハンドルを取得していますか? 自分のように順次取得して、順番で判断していますか? だとしたら、FindWindowExで取得した順番はOS環境や、取得する時々で変わったりしないモノなのでしょうか? よろしくお願いします。

  • 親ウインドウにあるOKボタンを押す方法

    非常に基本的なことを質問して申し訳ございません。 ●やりたいこと● ある親ウィンドウに「テキスト」と「OKボタン」があります。 OKボタンはひとつだけです。 このOKボタンを押して、親ウィンドウを閉じるだけです。 OKボタンを押せば、親ウィンドウは勝手に閉じます。 親ウィンドウのハンドルは取得できたのですが、 子ウィンドウ(ボタン"OK")のハンドルが取得できず、 その後の処理もできておりません。 ボタンはひとつだけなので、ボタンのハンドルを検索したりしなくても、 押すことはできるような気がするのですが・・・ 初心者の浅知恵で申し訳ございません。 やはり、ボタンのハンドルを取得して、押すコマンドを実行しないといけないのでしょうか? ボタンのハンドルを取得して、押すコマンドを実行する場合、 その方法を教えていただけると幸いです。 親ウィンドウのハンドルは変数「hWindow」に入っているとして、 コードをお願いいたします。 親ウィンドウのハンドル取得に使ったFindWindow以外に宣言が必要であればご教授お願いいたします。

  • 他アプリケーション’(ウィンドウ)のハンドル取得方法

     GetWindowTextを用いて、他ウィンドウ、他アプリケーション内のテキストボックスに表示されている、文字列を取得したいです。他アプリケーションは、自分のアプリケーションから、shell関数を用いて起動します。他ウィンドウのハンドル値は、shellの返り値でわかるのですが、テキストボックスのハンドル値が分かりません。 どなたか、 ご教授願います。 おねがいします。

  • .net frameworkで作られたフォームのウィンドウハンドルとインスタンスハンドルの取得方法

    このたびC++で.net frameworkを使い、アプリケーションを製作しているのですが、フォームのウィンドウハンドルと、アプリケーションのインスタンスハンドルの取得方法が分からなくて困っています。取得する方法はあるのでしょうか? 回答をお待ちしています。どなたかおねがいしますm(_ _)m

  • ウインドウの取得

    かんたんYouTubeプレーヤーというソフトのウインドウハンドルを取得し、プレーヤーウインドウのサイズや位置を変更するプログラムをVB2008で作成しようとしました。このプレーヤーはリストウインドウとプレーヤーウインドウの二つがあるのですが、窓ちぇき!というソフトでタイトルとクラス名を調べたら二つとも同じタイトルとクラス名になっていました。これだとFindWindow関数でウインドウハンドルを取得できません。どうすればよいでしょうか。

  • Wordでウィンドウハンドル(Hwnd)を取得したい

    Word2007、2002を使用しています。 Wordでウィンドウハンドル(Hwnd)を取得したいと思ったのですが、 どのように取得して良いかわかりませんでした。 Excelであれば以下のように取得できました。  Excel.Application.Hwnd どのようなプログラムを書けばHwndは取得できますでしょうか? 私なりに調べてみたのですが、うまく見付けられませんでした。 もしご存知でしたら、ご教示お願いいたします。

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

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

専門家に質問してみよう