他アプリのボタン押下を検知するには?


あうあう  2013-12-02 22:44:37  No: 45668

こんにちは、Delphi 2007 Professionalを使って表題の通り
他のアプリケーション上にあるボタンが押されたかどうかを検知したいです。

経験が少ないので、イマイチよくわかっていないのですが、少し検索したりで
調べた限りでは、プロセス間通信というものを使うのでしょうか?

もう少し簡単な方法があったり、わかりやすい例などあれば教えていただきたいです。

よろしくお願いします。


Mr.XRAY  2013-12-03 00:14:20  No: 45669

こういうのはメッセージの処理ということになります.
Windows は常にボタンクリックに限らず,何かの変化をメッセージとして監視しています.
Delphi のボタンクリックのイベントいうのは,その内,そのボタンクリックのメッセージだけを
捕捉 (捕まえる) ようにしたものです.

他のアプリのボタンがクリックされた,というメッセージは,一般には捕らえることはできません.
それを実現する方法があります.
それは,その,他のアプリが Delphi 製で,しかも,自分でコードの修正が可能などうかにもよります.
そういうことができない場合は,全く別のアプリのメッセージとして捕まえる工夫が必要です.

このメッセージの捕捉は,Windows のバージョンによっても仕様が異なります.
言語のバージョンや OS のバージョンによって,動作仕様が異なるのも,一般的なことかも知れません.


あうあう  2013-12-04 03:09:31  No: 45670

Mr.XRAYさん、お返事ありがとうです。

Windowsが何かは確認中ですが、おそらくXPです。
「他アプリ」がDelphi製である事はわかりましたが、ソースは好きにいじれません。

「工夫」という部分について、情けないのですが想像すらできません。
ヒント的なキーワードみたいなものでも良いので、教えていただけませんか


Mr.XRAY  2013-12-04 03:35:45  No: 45671

Windows XP なら比較的問題の発生が少なくて済みそうです.

で,もう 1 つ.
対象となるアプリはそのアプリだけなのか.
対象となるボタンは 1 つだけなのか,ということもコーディングに影響します.
と,ここまで書いたら.

>ヒント的なキーワードみたいなものでも良いので、教えていただけませんか

1 つあげるとすれば「フック」です.
フックは,プログラム的には難しい部類に入ると,私は思っています.

ボタンクリックを検出するのですから,ボタンのクリックを検出する必要があります.
ボタンクリックは,必ずしもマウスで行われるとは限りません.
そのボタンにフォーカスがある時に [Enter] でクリックするかも知れません.
また,そのアプリの何かの処理によっても,クリック動作を実行することがあるかも知れません.

詳しいことが不明ですので,この程度のレスが私の限界です.


Mr.XRAY  2013-12-04 03:42:57  No: 45672

例えばですね.

[03_ブラウザ Firefox の [戻る] [進む] ボタンをクリック]
http://mrxray.on.coocan.jp/Delphi/plSamples/678_IAccessibleInterface.htm#03

では,[戻る] と [進む] のボタンをクリックしていますが,
その逆も可能です.もちろん,コーディングは違いすます.フックを使用します.
ここで使用している IAccessible インターフェイス は,

[クリップボードに、複数の画像を出し入れするには?]
https://www.petitmonte.com/bbs/answers?question_id=8184

で,エクセル等の Officeクリップボードからデータを取得する際にも使用できるインターフェイスです.


Mr.XRAY  2013-12-04 04:04:07  No: 45673

>1 つあげるとすれば「フック」です.

ネット上でフックを検索すると,多くのサンプルがあります.
それらの多くは Windows Vista 登場前のサンプルがあることに注意してください.
もし,将来 Windows Vista 以降で動作させる必要性がある場合には注意が必要です.
Windows XP であればほとんど問題ありません.

Windows Vista 以降では,セキュリティ強化のため,
アプリケーション間のメッセージ送受信に制限があります.


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

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






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