Alt+P,Alt+NをPostmessageで送るには
あるアプリがあり、そのハンドルを取得してからメッセージを送るプログラムを作っています。
PageUp,PageDownをそれぞれAlt+P,Alt+Nに変換して送るものです。
関数・定数宣言部は省略しています。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim hTest As Long
hTest = FindWindow(vbNullString, "Test")
If KeyCode = 33 Then 'PageUp
PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
PostMessage MPL, WM_KEYDOWN, VK_N, 0
PostMessage MPL, WM_KEYUP, VK_N, 0
PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0
ElseIf KeyCode = 34 Then 'PageDown
PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
PostMessage MPL, WM_KEYDOWN, VK_P, 0
PostMessage MPL, WM_KEYUP, VK_P, 0
PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0
End If
End Sub
送り先(Test.exe)では、
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim L As String
L = ""
If Shift = 4 Then L = "Alt + "
Label1.Caption = L & KeyCode
End Sub
ラベルで「Alt+P」などが来ているかどうか見ています。こちらのウィンドウで「Alt+P」を押すとちゃんと表示されます。
しかし、この2つを組み合わせるとPのみやNのみしか送られてきません。どこかおかしいのでしょうか。
Alt+PなどをPostMessageで送る方法でよい方法があれば、お教え下さい。
よろしくお願いします。
補足
"Alt + F"とはメニューにカーソルを合わせてからということですか? 一応下記を参考に keybd_event で実現できました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1254391&rev=1 http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200402_04020031.html *************** '印刷ダイアログ起動 Ctrl + P SetForegroundWindow (hwindow) keybd_event VK_CONTROL, 0, 0, 0 keybd_event VK_P, 0, 0, 0 keybd_event VK_P, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 '印刷指示 ENTER keybd_event VK_ENTER, 0, 0, 0 keybd_event VK_ENTER, 0, KEYEVENTF_KEYUP, 0 '終了 WaitTimer 1 Do Until IsWindowEnabled(hwindow) <> 0 WaitTimer 0.5 SetForegroundWindow (hwindow) If IsWindow(hwindow) = 0 Then 'ウィンドウが無いときは抜ける Exit Function End If Loop WaitTimer 1 SetForegroundWindow (hwindow) PostMessage hwindow, WM_CLOSE, 0, 0