別アプリのComboboxのHandleを知るには...?


たけひろ  2003-03-28 15:04:58  No: 106462

別アプリの入力の行うアプリケーションを作ろうと思っているのですが、ComboboxとListboxについてはウィンドウテキストがうまく取得できないために、Comboboxが複数ある場合、特定のComboboxのHandleがどうにも取得できなくて困り果てています。

editコントロールとかだと
cwindow = FindWindowEx(hwindow, 0, "ThunderRT6TextBox", "Text1")
と言った具合で簡単に取得できるんですが

cwindow = FindWindowEx(hwindow, 0, "ThunderRT6TextBox", "Combo1")
とかやっても、ウィンドウテキストが無いため特定することができません。

一つしかなければ
cwindow = FindWindowEx(hwindow, 0, "ThunderRT6TextBox", vbNullString)
とかでごまかすこともできるんですが、複数あるともうお手上げ状態です..(T-T)

迷える子羊に愛の手をよろしくお願い致します〜


Loreley  2003-03-28 17:18:56  No: 106463

どんなアプリなのかがわかりませんけど、
GetWindowですべての子をとって
(EnumChildWindowsのほうがいいけど。VBでつかったことないから使えるのかがわからない)
さらにそれらのハンドルから、
GetWindowRectでサイズを取得して、
その位置情報から特定するというのはどうでしょう。
基本的にはComboBoxは位置は変わることはないと思いますから(サイズはフォントで変わるけど)

それ以外だと、EnumChildWindowsで返ってくる順番は同じっぽいので
(あくまで"ぽい"です(汗)確証はありません。
プラットフォームにもよる可能性もあるし)
それで識別するとか。

あんまり参考になりませんね(^^;


たけひろ  2003-03-29 07:59:15  No: 106464

どうもありがとうございます...

ちなみに環境はWINXPなんですが、どのアプリを見てもダメみたいで..
EnumChildWindowsで片っ端からウィンドウ拾い出して、GetWindowTextとかで調べても...なぜかComboBoxとListBoxは入ってません(^^;) ウィンドウテキスト..

>GetWindowRectでサイズを取得して、
>その位置情報から特定するというのはどうでしょう。
>それ以外だと、EnumChildWindowsで返ってくる順番は同じっぽいので
>あくまで"ぽい"です(汗)確証はありません。

実は後者の方、ない知恵を絞って昨日思いついて試してみました。

僕も多分戻ってくる順番は同じだろうということで、EnumChildWindowsで、特定のWINDOWにあるコントロールを列挙、クラス名がThunderRT6ComboBox(確かこんな感じ..)のウィンドウのHandleをCombo()とかの配列変数に格納していって...sendmessageとかするときはCombo(0)とかをそのHandleとして..毎回取得する順序は一緒(たぶん!)なので操作するときに事前に配列にこのように取得してやれば毎回ちゃんと特定のComboBoxにアクセスできると言うことにしてしまいました。。。

知り合いの不動産屋さんから頼まれたんですが、どうも最近は物件をいろいろなところに登録しないといけないようで...それがめんどくさいらしいです。で。。一発でいろんなところに自動登録!みたいなものを作って欲しいらしく...でも今日確認したら月に2件あるかどうからしいという感じのようで(^^;) 本当にそんなものが必要かどうかの方が疑問なんですが...(^^)/

どうもありがとうございました〜!

PS.最初の書き込みのThunderRT6TextBoxはThunderRT6ComboBoxの書き間違いです...


Lolerey  2003-03-29 13:25:39  No: 106465

ちなみに・・・
GetWindowText
は、テキストボックス、リストボックス、コンボボックスは
それぞれのコントロールの内容になりますんで、
たとえば
Text1.Text="" なら Nullに
Text1.Text="aaa" なら "aaa"になります。

だから中身が空だと取得しにくいんですよね
というかFormもWindowTextは動的だから(タイトルバーの文字になるので)
なかなかに難しい。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加