SendKeysの結果を得る方法について

解決


ダッド  2004-09-28 22:01:34  No: 116616  IP: [192.*.*.*]

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です。

編集 削除
Say  2004-09-29 02:26:09  No: 116617  IP: [192.*.*.*]

>また取得したいデータは複数のフィールドに表示されます。
>まずは電卓で基礎を学ぼうと思います。
取れるか取れないかは相手アプリの表示方法次第です。
電卓の計算結果程度ならWindowsAPI関数の
FindWindow,FindWindowEx,GetWindowTextを順に使えば取れます。
電卓Windowの階層構造は一度spy++などで確認しておいたほうがいいでしょう。

編集 削除
特攻隊長まるるう  2004-09-29 09:20:34  No: 116618  IP: [192.*.*.*]

そもそも 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

編集 削除
ダッド  2004-09-29 10:31:48  No: 116619  IP: [192.*.*.*]

Say様、特攻隊長まるるう様ありがとうございました。
大変参考になります。
自分なりに勉強・工夫していきたいと思います。

編集 削除