SendKeys で他のアプリケーションを利用した結果をVBで取得する
ことはできるのでしょうか。
Private Sub Command1_Click()
Shell "C:\WINDOWS\System32\calc.exe"
SendKeys "111", True
SendKeys "+;", True
SendKeys "222", True
SendKeys "{ENTER}", True
End Sub
計算結果は正常に電卓上に表示されますが、表示された結果を取得し
たいのです。
ここでは練習用に電卓を使用しましたが、実際にしたいのは別のアプ
リケーションです。
また取得したいデータは複数のフィールドに表示されます。
まずは電卓で基礎を学ぼうと思います。
よろしくお願いします。
※XP & V6です。
>また取得したいデータは複数のフィールドに表示されます。
>まずは電卓で基礎を学ぼうと思います。
取れるか取れないかは相手アプリの表示方法次第です。
電卓の計算結果程度ならWindowsAPI関数の
FindWindow,FindWindowEx,GetWindowTextを順に使えば取れます。
電卓Windowの階層構造は一度spy++などで確認しておいたほうがいいでしょう。
そもそも SendKeys 自体がアクティブウィンドウに渡してるだけ
なので色々処理するには不安の残る関数です。
例)
[VB6.0]
Private Sub Command1_Click()
Shell "C:\WINDOWS\System32\calc.exe"
SendKeys "111", True
Shell "C:\WINDOWS\System32\calc.exe"
SendKeys "+;", True
SendKeys "222", True
SendKeys "{ENTER}", True
End Sub
Say さんのおっしゃるような API 関連の勉強を
されるならウィンドウハンドルとか…その辺の
知識を使って処理するウィンドウを特定した処理
を行い、SendKeys を使わない方がいいかもしれません。
とりあえず動けばいいだけならクリップボードを
使ってもいいと思います。クリップボードも不安の
残る材料だと思いますがw
例)
[VB6.0]
Private Sub Command1_Click()
Shell "C:\WINDOWS\System32\calc.exe"
SendKeys "111", True
Shell "C:\WINDOWS\System32\calc.exe"
SendKeys "+;", True
SendKeys "222", True
SendKeys "{ENTER}", True
With Clipboard
.Clear
SendKeys "^{C}", True
MsgBox .GetText
End With
End Sub
Say様、特攻隊長まるるう様ありがとうございました。
大変参考になります。
自分なりに勉強・工夫していきたいと思います。