外部アプリケーション操作


リュウ  2004-08-07 02:54:38  No: 84988

初めまして、リュウと言います。質問があります。
VBから外部アプリケーションを操作する仕組みを作成しました。
SHELL関数で起動させSendKey関数を使用し操作させました。

以下の操作を実現。
1.外部アプリケーションを開く
2.外部アプリウインドウ内にあるツリーを選択
3.ウインドウ内にあるファイルメニューを選択
4.選択メニュー内の「ファイル保存」を選択しダイアログを表示
外部アプリのウインドウは最小化にしダイアログ等を表示させる。

外部アプリケーションはMS製品でないものが対象です。

SHELL関数でvbMinimizedNoFocusに設定し起動させているのですが、
外部アプリのウインドウの最小化が出来ません。キー操作は上手く行きました。
最小化するのに他にもやらねばならないことがあるのでしょうか?
また、根本的なことですがウインドウを最小化している状態で操作は
可能なのでしょうか?


sai  2004-08-07 04:27:17  No: 84989

そうですね〜
操作するアプリケーションが決まっているなら
FindwindowやFindwindowEXなどでウィンドウハンドル
を取得して後はSendMessageを使えばイイでしょう。


リュウ  2004-08-11 23:44:15  No: 84990

saiさん、返答ありがとうございます。API不慣れながら早速作成してみました。

外部アプリをShellExecuteで起動しFindWindowで起動させた
アプリのウインドウを特定しヘルプを開く実験を下記の
コードで実行してみましたが、上手く行きません。
ヘルプとかで見て作成してみたのですがどこが問題なのか分かりません。
すみませんが、お助けください。

    ' ファイルを開く
    rlng = _
        ShellExecute(Me.hwnd, _
                     srtOperation, _
                     strFileName, _
                     vbNullString, _
                     strDefaultDirectory, _
                     SW_SHOWNORMAL)
    hHandle = FindWindow(vbNullString, "AAA")
    SendMessage hHandle, WM_KEYDOWN, vbKeyF1, 0
    SendMessage hHandle, WM_KEYUP, vbKeyF1, 0


リュウ  2004-08-11 23:48:34  No: 84991

すみません、どこが上手く行かないかを明記していませんでした。
SendMessageの操作でヘルプが開きません。keybd_eventで試したりすると
今度は外部アプリがアクティブにならずVBのウインドウがアクティブになり
キー操作自体が上手くいっていなようでした。


リュウ  2004-08-12 03:08:45  No: 84992

うーん、PostMessageに置き換えましたらできました。ヘルプ表示について。
SendMessageの方でほんとにキー操作できるのでしょうか?


リュウ  2004-08-12 03:16:09  No: 84993

後、「Alt+F」とかを操作したいです。
Postmessageで飛ばすとき以下の方法で行ったのですが、
外部アプリが反応しませんでした。
正しい記述方法を教えてください。

  Dim hHandle     As Long
   hHandle = FindWindow(vbNullString, "AAA")
    If hHandle <> 0 Then
        PostMessage hHandle, WM_KEYDOWN, VK_ALT, 0
        PostMessage hHandle, WM_KEYDOWN, ASC("F"), 0
        PostMessage hHandle, WM_KEYUP, ASC("F"), 0
        PostMessage hHandle, WM_KEYUP, VK_ALT, 0
        DoEvents
       
    End If


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

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






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