喫茶XRAYトップページ


[1841] 他のアプリのボタン押下を取得返信 削除
2008/8/25 (月) 11:53:27 satot
市販のアプリの特定のボタンを、ユーザーが押したタイミングで、その
アプリの特定のEditBoxにある文字列を、Delphi側で取得したいのですが、
可能でしょうか。ボタンを押す方法は、拝見いたしたのですが......
よろしくお願いします。

[1842] 他のアプリのエディットの値を取得返信 削除
2008/8/25 (月) 22:21:13 Mr.XRAY
▼ satotさん

> アプリの特定のEditBoxにある文字列を、Delphi側で取得したいのですが、

他のアプリの場合,全てのコントロールの値が簡単に取得できるわけでは
ありませんが,satotさんのいうEditBoxが,ウィンドウズのエディットコン
トロール(テキストボックス)であれば比較的簡単に取得可能です.

そのためには,そのコントロールのハンドル値を取得しなければなりません.
例えば

670_他アプリへ文字列送信と取得670_SendTextThreadAttach)
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/670_SendTextThreadAttach.htm

のリスト1の
Button2Click
Button3Click
Button4Click

では,
RevHandle:=Self.GetFocusWindow(hWindow);
で,フォーカスのあるコントロールのハンドルを取得しています.
(ん? なんでSelfがついているんだ?)

そのハンドルをRevHandleとすれば,すぐ下のコードのように,
文字列を取得するメッセージを送り,取得できます.

問題は,RevHandleに相当する対象コントロールのハンドル値をどう
やって取得するかです.メモ帳などであればアドバイスできますが,
対象のアプリの仕様にもよりますので,具体的な方法のアドバイス
はちょっと無理です.

[1843] Re:他のアプリのボタン押下を取得返信 削除
2008/8/25 (月) 23:31:19 Mr.XRAY
▼ satotさん

失礼!!
他のアブリのボタンクリックを取得でしたね.
いくつか考え方がありますが,
さて,どうしましょう.少し待ってください.

(1) マウス左ボタンのUPをフック
(2) 対象コントロールのWindowProcをサブクラス化

さて...,(1)の方がいいかな〜.

[1844] Re2:他のアプリのボタン押下を取得返信 削除
2008/8/25 (月) 23:49:21 Mr.XRAY
▼ satotさん

> さて...,(1)の方がいいかな〜.

(1) なら
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/260_HookKeyMouseEvent.htm
(2) なら
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSetPrinter/OthesDialog.htm#03

を元に考えていくことになると思います.
ただし,(2)の場合,他のアプリですので,SetWindowLong関数を使用
することになります(第2引数にGWL_WNDPROCを指定).
いずれにしても,対象コントロールのハンドル値を何らかの方法で
取得する必要はあります.

[1845] Re3:他のアプリのボタン押下を取得返信 削除
2008/8/26 (火) 10:31:07 satot
▼ Mr.XRAYさん
深夜に、大変ご丁寧なご指導ありがとうございます。感謝感謝です。
少々ハードルの高いところもありますが、老化防止のため、
頑張ってみようと思います。
念のため、用途を書きますと、
病院の受付機ですが、受付のボタンを押した後、再度本日の診療予定
印刷の操作が必要で、これを一回の受付ボタンクリックで印刷まで済ましたいと
いう目的です。
(けして、「送信ボタン」が押された時に、入力されたパスワードを
読みとるという目的ではありません!)ご安心ください。

[1846] Re3:他のアプリのボタン押下を取得返信 削除
2008/8/26 (火) 13:41:53 junki 〔HomePage
こんにちは。おひさしぶりです。

▼ Mr.XRAYさん

> 他のアブリのボタンクリックを取得でしたね.
> いくつか考え方がありますが,
> さて,どうしましょう.少し待ってください.
>
> (1) マウス左ボタンのUPをフック
> (2) 対象コントロールのWindowProcをサブクラス化
>
> さて...,(1)の方がいいかな〜.


たんなる技術的興味からですが、(2) の場合は、置き換えるウィンドウプロシージャは
共有メモリに置くのですか? そうでないのなら、SetWindowLong() で与える
関数ポインタはこちらのアプリのローカルのアドレスでもかまわないのですか?

よろしくお願いいたします。

[1847] Re4:他のアプリのボタン押下を取得返信 削除
2008/8/26 (火) 17:01:41 Mr.XRAY
ひぇ〜,junkiさん,

> たんなる技術的興味からですが、(2) の場合は、置き換えるウィンドウプロシージャは

ですよね.他のプロセスですもん.
ローカルのアドレスでは無理ですよね.
このために,DelphiにAllocateHWnd,DeallocateHWndという関数があるようです.
具体的な使用例はヘルプの例にもありますが,Halbow資料館ですと

http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N012.html
http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N007.html

なところでしょうか.ちょっと面倒な気がします.
今回の場合は,ボタンクリック(Mouse Up)だけでいいようなので,
マウスフックでいいでしょうね.


ところで,話は違うのですが,Junkiさんのところのサンプルを自分のPCで
見られるように,nanaさん(サイトは閉鎖)のnanaTreeで保存を始めたのですが,
画像が多いためか,非常に動作が重たくなってしまい,途中で断念してしまい
ました(笑).

やはり,データベース的に扱わないと無理がありそうです.

[1848] Re5:他のアプリのボタン押下を取得返信 削除
2008/8/26 (火) 18:29:02 junki 〔HomePage
こんばんは。

▼ Mr.XRAYさん
> ひぇ〜,junkiさん,
>
> > たんなる技術的興味からですが、(2) の場合は、置き換えるウィンドウプロシージャは
>
> ですよね.他のプロセスですもん.
> ローカルのアドレスでは無理ですよね.
> このために,DelphiにAllocateHWnd,DeallocateHWndという関数があるようです.
> 具体的な使用例はヘルプの例にもありますが,Halbow資料館ですと
>
> http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N012.html
> http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N007.html
>
> なところでしょうか.ちょっと面倒な気がします.


ご回答、ありがとうございました。
AllocateHWnd、DeallocateHWnd を調べてみます。

> ところで,話は違うのですが,Junkiさんのところのサンプルを自分のPCで
> 見られるように,nanaさん(サイトは閉鎖)のnanaTreeで保存を始めたのですが,
> 画像が多いためか,非常に動作が重たくなってしまい,途中で断念してしまい
> ました(笑).


ご迷惑をおかけします。
ロリポップはもうすぐ・#95;約が切れます。ブログと main.jp のHPはなくなりますが
HP の内容はそっくりそのまま lix.jp の方に2年前から移しております。
このごろは写真に凝っていて、Delphi も C# も半年は起動していません。
また始めようか、といつも思ってはいるのですが。

重ねて、ご回答、ありがとうございました。

[1849] Re6:他のアプリのボタン押下を取得返信 削除
2008/8/26 (火) 22:49:05 Mr.XRAY
▼ junkiさん

> 重ねて、ご回答、ありがとうございました。

とんでもありません.
junkiさんの書き込みがなかったら気が付きませんでした.

INCM/CMT
Cyclamen v3.82