- 締切済み
ウインドウハンドルのつかみ方について質問です。
visualbasic6.0で開発をしています。 例えば、同親内の子コントロールに同じ「edit」クラスが2つ存在していたとします。 私は、ハンドルを掴むのにクラス名とキャプション名で掴んでいます。 しかし、クラス名は一緒で、キャプション名は存在しません。 すると、2つのコントロールを区別することができません。 現在は、FindWindowExで取得したハンドルを、アプリケーション「spy」等であっているか確認しています。 上記のような、クラス名とキャプションで判断できないものは、皆さんどのようにハンドルを取得していますか? 自分のように順次取得して、順番で判断していますか? だとしたら、FindWindowExで取得した順番はOS環境や、取得する時々で変わったりしないモノなのでしょうか? よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
コントロールIDでも一意とは限らないんですけども。 staticコントロールなんて固定の文字列だったら慣例的に-1だし、意識的に同じコントロールID振ることも出来ます。 もちろん位置やサイズも一意になるかといわれると確実にはならないですけどね。 でもどちらが確実かといわれると位置になると思いますよ。
- piyo2000
- ベストアンサー率49% (144/293)
確かにControlIDでもよさそうですね(^^; >具体的にControlIDを指定してハンドルを掴む行為はどのような、API?を使用すればよろしいのでしょうか? #5さんが紹介しているGetDlgCtrlID()を使えばいいですね。 またはGetDlgItem()とか。 FindWindowEx()でコントロールのhwndを列挙しながら、GetDlgCtrlID()でコントロールIDをチェックしていく、と言う感じになると思います。 親ウインドウのHWND&コントロールIDが分かっていれば、GetDlgItem()でもOKだと思います。
- 2ch
- ベストアンサー率51% (64/125)
こんとろーるあいでぃ
- 2ch
- ベストアンサー率51% (64/125)
コントロールIDに一票
- todo36
- ベストアンサー率58% (728/1234)
コントロールID
- piyo2000
- ベストアンサー率49% (144/293)
「edit」とあるところからも、VC++等で作成された他アプリのWindowハンドルを取ってくる、というのが目的なのでしょうか? そもそもTextBoxであればhwndプロパティがありますからこのような心配は無用ですからね(^^; >2つのコントロールを区別することができません。 私なら、あまりスマートではないですが、editコントロールということでクライアント座標から判断しますね。 クライアント座標はOS環境やデスクトップサイズ等では変わりません(そういう仕様にしてあれば別の話ですが)から。
お礼
やっぱりあとは座標ですかねぇ
- taka_tetsu
- ベストアンサー率65% (1020/1553)
あとは位置くらいですかね。判断材料は。
お礼
やっぱりあとは座標ですかねぇ ありがとうございます
補足
自アプリ以外のアプリケーションのハンドルを掴みたいのですが、具体的にControlIDを指定してハンドルを掴む行為はどのような、API?を使用すればよろしいのでしょうか? よろしくお願いします。