喫茶XRAYトップページ

[スレッド全体
]

[8687] 子ウィンドウの探索について返信 削除
2015/4/12 (日) 09:46:17 qwerty
はじめまして

 いつもMr.XRAYさんのサンプルプログラムで勉強させていただいており、
ありがとうございます。

 今回「Halbow 資料館 第6章 ウィンドウの階層について」を拝見しながら
いろいろ試しておるところですが、「6−5 子ウィンドウの探索」の
例にあるフォームでLabelが列挙されていないのに気付きました。
 自分の検証プログラムでも同様でしたが、Labelが検索対象から外れる理由が
あるのでしょうか。

[8689] Re:子ウィンドウの探索について返信 削除
2015/4/12 (日) 10:02:59 Mr.XRAY
▼ qwertyさん

> 例にあるフォームでLabelが列挙されていないのに気付きました。
>  自分の検証プログラムでも同様でしたが、Labelが検索対象から外れる理由が
> あるのでしょうか。


よくぞ訊いてくれました!!
こういうのを待っているんですよ,いつでも.

実はですね.コントロールにはウィンドウハンドルを持っているやつと,
そうでないやつがあるんです.
ウィンドウハンドルについての説明はちょっと置いていて.また機会があれば,

TLabel  --- ウィンドウハンドルなし
http://docwiki.embarcadero.com/Libraries/XE8/ja/Vcl.StdCtrls.TLabel

TButton -- ウィンドウハンドルあり
http://docwiki.embarcadero.com/Libraries/XE8/ja/Vcl.StdCtrls.TButton

この 2 つを見てみると,
TLabel は TGraphicControl
TButton は TWinControl
となっています.TWinControl がウィンドウハンドルを持つコントロールです.

で,本題ですが,ウィンドウ関係の Windows API で検出できるのは,
ウィンドウハンドルを持つコントロールだけなんです.
それで,そういう結果になりますです.
他に疑問や文句があれば,なんなりと.

# 当サイト,いや,喫茶XRAYにもサブスクリプション導入しようかな (笑)



[8693] Re2:子ウィンドウの探索について返信 削除
2015/4/12 (日) 13:51:20 qwerty
▼ Mr.XRAYさん
 ありがとうございます。

 それでは他のアプリケーションのGrpahicControlを検出して操作する
方法はあるのでしょうか。


[8694] Re3:子ウィンドウの探索について返信 削除
2015/4/12 (日) 19:51:51 Mr.XRAY
▼ qwertyさん

>  それでは他のアプリケーションのGrpahicControlを検出して操作する
> 方法はあるのでしょうか。


そのような専用の関数類はありませんね.
TForm を使用するアプリのプロジェクトで,フォームのコードを見てみてください.
拡張子は .dfm です.テキストエディタでみることができます.
IDE からも見ることができます.

EXE を作成すると,この情報がリソースとして EXE に埋め込まれます.
記憶では RC Data かなんかです.
ここから TLabel の情報を取り出して,操作することは可能かも知れません.
やったことはないですが.

例えば,アプリケーションマニフェストは以下のように取り出せます.
http://mrxray.on.coocan.jp/Delphi/plSamples/314_CreateAppManifest.htm#01

自アプリで,しかも,別途ストリームに保存したコンポーネントの場合です.
EXE のリソースもストリーム操作ですから,可能性はあります.
http://mrxray.on.coocan.jp/Delphi/plSamples/130_SaveComponent.htm#03

もし,他のアプリというのが,自分で開発するのであれば,
外部からのメッセージで取得や操作するような仕組みを作ることは可能です.


[8696] Re4:子ウィンドウの探索について返信 削除
2015/4/12 (日) 20:37:51 qwerty
▼ Mr.XRAYさん

 ご丁寧にご説明いただきましてありがとうございました。

 毎日業務で使用している既成のアプリケーションで、起動ログインから
始まって、作業画面を表示設定するまでの一連の定型操作を自動化したいと
考えましたが、EnumWindows、EnumChildrenで検出できないコントロールが
あり、今回お尋ねした次第です。


 前回のご返事の末尾で

# 当サイト,いや,喫茶XRAYにもサブスクリプション導入しようかな (笑)

とありましたが、どういう意味でしょうか。

[8697] Re5:子ウィンドウの探索について返信 削除
2015/4/12 (日) 21:04:24 Mr.XRAY
▼ qwertyさん

> # 当サイト,いや,喫茶XRAYにもサブスクリプション導入しようかな (笑)
>
> とありましたが、どういう意味でしょうか。


 いえ,あの,その,えっと.深く考えないでください.
qwertyさんへ発信したのではなく,ちょっとした冗談です (大汗)


> 毎日業務で使用している既成のアプリケーションで、起動ログインから
>始まって、作業画面を表示設定するまでの一連の定型操作を自動化したいと


詳しいことはわかりませんが.そのアプリが TLabel を使用している
ということなんですね.
他のアプリの操作という意味で言えば,実際に利用するかどうかは別にしても,
読み物としては参考になるかも.難解かもしれませんが.
Delphi の独自実装である TGraphicControl は検出できません.

[678_他のアプリの操作と IAccessible インターフェイス]
http://mrxray.on.coocan.jp/Delphi/plSamples/678_IAccessibleInterface.htm

[679_他のアプリの操作とUI Automation 関係インターフェイス]
http://mrxray.on.coocan.jp/Delphi/plSamples/679_UIAutomation_Test.htm


[8699] Re6:子ウィンドウの探索について返信 削除
2015/4/12 (日) 22:23:18 qwerty
▼ Mr.XRAYさん

> qwertyさんへ発信したのではなく,ちょっとした冗談です (大汗)

 了解しました。冗談が通じなくて済みません。

> 詳しいことはわかりませんが.そのアプリが TLabel を使用している
> ということなんですね.


 問題のアプリで表示されるのは、ListBoxのように見えて各行間には
罫線が置かれ、かつ縦スクロールバーを備えているものです。
 EnumChildrenで探索するとスクロールバーのみが列挙されます。

 「Halbow 資料館 第6章 ウィンドウの階層について」でLabelが列挙されない
のを見て、問題のコントロールもいくつかのLabelを並べたものかなと
考えました。
(並べたLabelはTransparentにして後ろに置いたImageに罫線が引いてある?)
(どうしてすなおにListBoxを使わないのかな?)

> [678_他のアプリの操作と IAccessible インターフェイス]
> http://mrxray.on.coocan.jp/Delphi/plSamples/678_IAccessibleInterface.htm
>
> [679_他のアプリの操作とUI Automation 関係インターフェイス]
> http://mrxray.on.coocan.jp/Delphi/plSamples/679_UIAutomation_Test.htm


 ご提示いただいた記事で勉強したいと思います。おっしゃる通り難解で、
次にお尋ねできるようになるまででもかなり時間がかかりそうですが、
その節はよろしくお願いいたします。

 たいへんありがとうございました。

[8701] Re7:子ウィンドウの探索について返信 削除
2015/4/13 (月) 06:19:42 Mr.XRAY
>  ご提示いただいた記事で勉強したいと思います。おっしゃる通り難解で、

添付の EXE を起動して,どんな動作をするのかを知ることぐらいはできますので.
一般に,他のアプリの操作は難しいと思うんです.
やってみる価値があるかどうかはケースバイケースですが,
個人的には,できれば避けたいですね.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82