他アプリのGUIを自動制御するようなアプリを考えています。
お決まりのFindWindow等で判別はできるのですが、
この手のアプリは、一般的に、
何を一意のキーとして判別しているのでしょうか?
マウスの位置は画面サイズで変更されてしまいますし、
Handle系は毎回違う値でしょうし、
ClassNameは例えばボタンは全て同じもので判別できません。
Captionは、多言語の場合対応できません。
何か、オブジェクトID的なものがあれば良いのですが、
.Netで設定する「Name」プロパティは、
そのアプリ内部でしか取得できないようなので・・・
やはり、ある程度は妥協するのが一般的なのでしょうか?
(例えば、ClassName+Captionで判定し、
文字が変わった場合は仕方ない、のような)
ZORDERとか。
EnumChildWindowsとかFindWindowExとかを使えば、同じクラス名、キャプション名であ
っても列挙される順番で特定できます。
GetDlgCtrlIDという手段もあります。
用途はダイアログに限定されますが、同じクラスを持ったウィンドウ同士の判別の
多くはダイアログかと思いますので多少は有効かと思います。
他のアプリケーションの場合に対して何処までコントロールしたいのかというのが
良く分からないので外しているかもしれませんが、自分以外のアプリケーションの
構成は知りようが無いと言うか、どういう意図でそのコントロールが配置されたかは
知りようが無いと思います。
そういう意味では汎用的にコントロールすると言うこと自体に無理があるような
気がします。ある程度のコントロールをする事は出来てもかなり妥協する必要が
あるのではないかと思います。
結局の話、キャプションを変えるのもIDを変更するのもアプリを作る側の勝手なわけで
画面上のレイアウトを変えられたりすれば、結局同じことかなと思いますし。
皆様ありがとうございます。
PATIO様の指摘はまさにそのとおりで、
結局、誰が作ったか不明なアプリは、
そっちが変わってしまうとどうしようも無いので「妥協」は避けられません。
ヘルプ等を見たら、
Win32ベースではCaptionが一意のような事が書かれており、
これが1つの基準のようです。
とりあえず解決とします。
コメントして頂いた方、ありがとうございました。
> Win32ベースではCaptionが一意のような事が書かれており、
ってどこに書かれていましたか?
ここでおっしゃるCaptionとは?