他のアプリケーションのボタンで操作したいと思い
FinderSystemやNuke++等のツールを使いウィンドウハンドルを調べ
SendMessage関数を使ってコマンドボタンのクリックをする所までは
できるのですが、ツール等でウィンドウハンドルを取得できないラベル
トグルボタンが存在し、画面上では明らかに存在しているのですが
そのボタンには反応せず、大きな枠組みでウィンドウハンドルを
取得してしまいます。FindWindow、FindWindowEx、GetWindow
EnumChildWindowで子ウィンドウのハンドルまで調べたのですが
値が0になってしまいます。他にもボタンだけではなく
タブコントロールも操作したいと思っているのですが
同様に子ウィンドウハンドルの値は0になってしまいます
そもそもウィンドウハンドルを全て取得することは不可能なのでしょうか?
いろいろな他のアプリケーションのコマンドボタンをFinderSystemで調べて
取得できる場合とできない場合があり、この差は何なのか
疑問に思っています。ご存知のお方がいれば
お手数ですが教えていただけないでしょうか?
開発環境は、WindowsXP、VB6.0です。
宜しくお願いいたします。
例えば、"Windowless Control"などについて調べてみるとか。
K.J.K. さん
アドバイスありがとうございます。
「Windowless Control」に関しては知識がないのですが
名前からして、ウィンドウハンドルを取得できないよう
コントロールへ設定するということでしょうか・・・
そのように仮定すると、やはり全てのウィンドウハンドルを
取得するのは無理なのでしょうか。
ネットでいろいろ調べると、プロセスID,スレッドID,共有メモリ?から
取得するようなことが書いてありました。
「Windowless Control」は早速ネットで調べてみます。
ありがとうございました。
>「Windowless Control」に関しては知識がないのですが
調べてからどうぞ
「Windowless Control」をMSDNで調べましたが、実際
デザイン時に Windowless プロパティを True に設定してない
コントロール群もhWndを取得できませんでした。
>そもそもウィンドウハンドルを全て取得することは不可能なのでしょうか?
実際にウィンドウがあるならば、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 なのでしょう。
ツイート | ![]() |