初めまして、リュウと言います。質問があります。
VBから外部アプリケーションを操作する仕組みを作成しました。
SHELL関数で起動させSendKey関数を使用し操作させました。
以下の操作を実現。
1.外部アプリケーションを開く
2.外部アプリウインドウ内にあるツリーを選択
3.ウインドウ内にあるファイルメニューを選択
4.選択メニュー内の「ファイル保存」を選択しダイアログを表示
外部アプリのウインドウは最小化にしダイアログ等を表示させる。
外部アプリケーションはMS製品でないものが対象です。
SHELL関数でvbMinimizedNoFocusに設定し起動させているのですが、
外部アプリのウインドウの最小化が出来ません。キー操作は上手く行きました。
最小化するのに他にもやらねばならないことがあるのでしょうか?
また、根本的なことですがウインドウを最小化している状態で操作は
可能なのでしょうか?
そうですね〜
操作するアプリケーションが決まっているなら
FindwindowやFindwindowEXなどでウィンドウハンドル
を取得して後はSendMessageを使えばイイでしょう。
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
すみません、どこが上手く行かないかを明記していませんでした。
SendMessageの操作でヘルプが開きません。keybd_eventで試したりすると
今度は外部アプリがアクティブにならずVBのウインドウがアクティブになり
キー操作自体が上手くいっていなようでした。
うーん、PostMessageに置き換えましたらできました。ヘルプ表示について。
SendMessageの方でほんとにキー操作できるのでしょうか?
後、「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
ツイート | ![]() |