こんにちは、Delphi 2007 Professionalを使って表題の通り
他のアプリケーション上にあるボタンが押されたかどうかを検知したいです。
経験が少ないので、イマイチよくわかっていないのですが、少し検索したりで
調べた限りでは、プロセス間通信というものを使うのでしょうか?
もう少し簡単な方法があったり、わかりやすい例などあれば教えていただきたいです。
よろしくお願いします。
こういうのはメッセージの処理ということになります.
Windows は常にボタンクリックに限らず,何かの変化をメッセージとして監視しています.
Delphi のボタンクリックのイベントいうのは,その内,そのボタンクリックのメッセージだけを
捕捉 (捕まえる) ようにしたものです.
他のアプリのボタンがクリックされた,というメッセージは,一般には捕らえることはできません.
それを実現する方法があります.
それは,その,他のアプリが Delphi 製で,しかも,自分でコードの修正が可能などうかにもよります.
そういうことができない場合は,全く別のアプリのメッセージとして捕まえる工夫が必要です.
このメッセージの捕捉は,Windows のバージョンによっても仕様が異なります.
言語のバージョンや OS のバージョンによって,動作仕様が異なるのも,一般的なことかも知れません.
Mr.XRAYさん、お返事ありがとうです。
Windowsが何かは確認中ですが、おそらくXPです。
「他アプリ」がDelphi製である事はわかりましたが、ソースは好きにいじれません。
「工夫」という部分について、情けないのですが想像すらできません。
ヒント的なキーワードみたいなものでも良いので、教えていただけませんか
Windows XP なら比較的問題の発生が少なくて済みそうです.
で,もう 1 つ.
対象となるアプリはそのアプリだけなのか.
対象となるボタンは 1 つだけなのか,ということもコーディングに影響します.
と,ここまで書いたら.
>ヒント的なキーワードみたいなものでも良いので、教えていただけませんか
1 つあげるとすれば「フック」です.
フックは,プログラム的には難しい部類に入ると,私は思っています.
ボタンクリックを検出するのですから,ボタンのクリックを検出する必要があります.
ボタンクリックは,必ずしもマウスで行われるとは限りません.
そのボタンにフォーカスがある時に [Enter] でクリックするかも知れません.
また,そのアプリの何かの処理によっても,クリック動作を実行することがあるかも知れません.
詳しいことが不明ですので,この程度のレスが私の限界です.
例えばですね.
[03_ブラウザ Firefox の [戻る] [進む] ボタンをクリック]
http://mrxray.on.coocan.jp/Delphi/plSamples/678_IAccessibleInterface.htm#03
では,[戻る] と [進む] のボタンをクリックしていますが,
その逆も可能です.もちろん,コーディングは違いすます.フックを使用します.
ここで使用している IAccessible インターフェイス は,
[クリップボードに、複数の画像を出し入れするには?]
https://www.petitmonte.com/bbs/answers?question_id=8184
で,エクセル等の Officeクリップボードからデータを取得する際にも使用できるインターフェイスです.
>1 つあげるとすれば「フック」です.
ネット上でフックを検索すると,多くのサンプルがあります.
それらの多くは Windows Vista 登場前のサンプルがあることに注意してください.
もし,将来 Windows Vista 以降で動作させる必要性がある場合には注意が必要です.
Windows XP であればほとんど問題ありません.
Windows Vista 以降では,セキュリティ強化のため,
アプリケーション間のメッセージ送受信に制限があります.
ツイート | ![]() |