• 締切済み

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