あるVBのアプリ(以下「A」とする)からVBでできた別アプリ(以下「B」とする)を遠隔操作しようと思っています。
AからBのあるテキストボックスにある文字列を送って表示させるのはできたんですけど、それが正しく入力されているかどうかを確認する方法がわかりません。
Bのソースは極力触らずにしたいのです。したがってBからAに何らかのメッセージを送って確認する方法ではなく、すべてAからBへの監視だけで実現する方法はあるでしょうか?
また、Bを遠隔操作しているなかで、「現在カーソルがどこにあるか?」などがわかるともっといいのですが・・・
環境はVB6+SP4・Windows2000
です。よろしくお願いします。
文字列を送るのには成功したんですよね?
だったら、受け取るのはその逆、GetWindowTextなどのAPIを使います。
このAPIは確かSendMessageを呼び出してるだけだというので、SendMessageでもいいです。
こっちのほうが宣言の必要も少ない(このAPI自体いろんなところで使えるので)し、
メモリとかの節約(といっても数バイト以下でしょうけど^^;)になります。
それに、SendMessageひとつ覚えておけば、なにかと使えるので、
多くのAPIを覚える必要がないです。
けど、間違った処理(メッセージボックスのアイコン部分からテキストを取ろうとするとか)をすると、
上のAPIではエラーを内部出処理してくれるのに比べて、
SendMessageでは強制終了します。
まあ、お好きなほうをどうぞ^^;
たかみちえさん、毎度ありがとうございます。
さっき、「AからBのあるテキストボックスにある文字列を送って
表示させるのはできたんですけど」って言いましたけど、勘違いでした。
電卓に文字を送って成功したので有頂天になってました。(笑)
ちなみに、GetWindowTextは、アプリの「タイトル」の取得ではないかと・・
今までに試したことは、
Call PostMessage(ハンドル値, WM_KEYUP, vbKeyTab, 0)
で遠隔操作するEXEのカーソルを次のコントロールに移動させることです。
電卓に文字列を送っているサンプルには
Call PostMessage (ハンドル値, WM_CHAR, Asc("1"), 0)
ってあったんで同じようにやったのですが、別EXEのほうには何も入力され
ませんでした。
いかがなもんでしょうか?
> ちなみに、GetWindowTextは、アプリの「タイトル」の取得ではないかと・・
本来の使いかたはそうですけど、
これをラベル(にはおくれないので、実際は他のソフトのスタティックテキストなど)に送ると、
そこに表示してる文章がもらえます。
複数行テキストに送ると、そこに表示してるテキストが丸ごともらえます。(バッファを6万バイトぐらい取っておけば、だいたい全文もらえます^^;)
リッチテキストも…同じです。
なにも表示していないところでは…何ももらえませんけど。
このソフトを使ってみると、よく分かると思います。
FinderSystem — http://www.h3.dion.ne.jp/~hanagex/
(開発にはあると便利なので、こういうのいいですねぇ)
> Call PostMessage (ハンドル値, WM_CHAR, Asc("1"), 0)
んんん…。実際はそうやってできるんでしょうけど、わたしはやったことないですねぇ^^;
キーボタンの押した順を送るには、そのウィンドウをアクティブにして、
SendKeysメソッドかKeybd_eventのAPIを使います。
1を送りたいなら、
SendKeys"1"とか…。
WM_CHARを送ってもいいんでしょうけど、ここはせっかくSendKeysなんて便利なものがあるんだから、これを使うといいかと。
(SendKeysを使うと、NumLockが外れてしまう不具合があるので、気になるようならKeybd_eventで)
ほほーそういう使い方ですね。
ありがとうございます。もう少し調べてみます。
ツイート | ![]() |