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


W_KNIGHT  2005-10-16 08:32:29  No: 126280

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


K.J.K.  2005-10-17 03:49:03  No: 126281

例えば、"Windowless Control"などについて調べてみるとか。


W_KNIGHT  2005-10-17 18:30:01  No: 126282

K.J.K. さん
アドバイスありがとうございます。
「Windowless Control」に関しては知識がないのですが
名前からして、ウィンドウハンドルを取得できないよう
コントロールへ設定するということでしょうか・・・
そのように仮定すると、やはり全てのウィンドウハンドルを
取得するのは無理なのでしょうか。
ネットでいろいろ調べると、プロセスID,スレッドID,共有メモリ?から
取得するようなことが書いてありました。
「Windowless Control」は早速ネットで調べてみます。
ありがとうございました。


名無し  2005-10-17 21:17:11  No: 126283

>「Windowless Control」に関しては知識がないのですが

調べてからどうぞ


W_KNIGHT  2005-10-17 21:44:06  No: 126284

「Windowless Control」をMSDNで調べましたが、実際
デザイン時に Windowless プロパティを True に設定してない
コントロール群もhWndを取得できませんでした。


魔界の仮面弁士  2005-10-17 22:57:28  No: 126285

>そもそもウィンドウハンドルを全て取得することは不可能なのでしょうか?
実際にウィンドウがあるならば、EnumChildWindow で取得できると
思いますが……実際のコードはどのようになっていますか?

>「Windowless Control」に関しては知識がないのですが
>名前からして、ウィンドウハンドルを取得できないよう
>コントロールへ設定するということでしょうか・・・
取得できないようにする、というのとはちょっと異なるかも。

ウィンドウレス コントロールは、文字通り「ウィンドウでは無い」ので、
そもそもウィンドウハンドル(hWnd)自体が存在しない、という事です。
つまり、実際にはあるのに取得できないようになっている、という事ではなく、
そもそも hWnd 自体が無いので、取得のしようが無い、という話になります。

ゆえに、まずはそのコントロールがウィンドウを持っているのかどうかが
重要になります。"Accessible explorer" を使うと、ウィンドウを持たない
コンポーネントも取り出せる可能性があるので、試してみてください。

Accessible Explorer
http://msdn.microsoft.com/library/en-us/msaa/msaaccgd_6alu.asp

なお、走査対象がウィンドウレスだった場合、Accessible Explorer 画面の
"Windows:"欄には、親ウィンドウのハンドルが表示される事になります。

> 同様に子ウィンドウハンドルの値は0になってしまいます
ウィンドウハンドルが 0 というのも、奇妙な話に聞こえるのですが、もしかしたら、
APIの使い方が間違っていて、ゼロになっている可能性も捨て切れませんね。

ただ、FinderSystem で捕らえられないのであれば、おそらく、Windowless なのでしょう。


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

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






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