タイトル : Re: キー入力をコードでする方法 投稿日 : 2009/12/14(Mon) 16:35 投稿者 : 魔界の仮面弁士
> 『VbKeyF15』と言う それは F5 ではなく、F15 です。 > キーボードで『F5』キーを押した状態と > 同じ動作をコードから行いたいのですが、 F5 押下を、他のアプリケーションに通知したいのでしょうか。 それとも、自アプリに対して通知したいのでしょうか。 また、そもそも何のために F5 を押した状態にしたいのでしょうか? たとえば、自フォームについて Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF5 Then '何かの処理 End If End Sub という処理が記述されていて、これをボタンクリック時にも発生させたいのなら、 F5 キーの押下を擬似的に発生させるよりも、 Private Sub Foo() '何かの処理 End Sub Private Sub Command1_Click() Foo End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF5 Then Foo End If End Sub のような実装にした方が良いかと思います。 > 方法がよく分かりません。 このサイトの左フレームから、[VB6.0関係]-[カテゴリ別一覧]-[その他] にある 『キーストロークをシミュレート(押下げ・制御)する(SendInput関数使用)』 を辿ってみてください。 http://hanatyan.sakura.ne.jp/index.html ただし、この方法(SendInput)で擬似的に発生させたキー入力という物は、 あくまでも「その時点におけるフォアグラウンドウィンドウ」が受け取ります。 ウィンドウ切り替えが発生するなどして、処理のタイミングがずれると、その通知が 目的のアプリケーションに受け取られるとは限らないという点に注意してください。 SendInput 以外の方法としては、アプリケーションに特化したウィンドウメッセージを API (SendMessage/PostMessage)で生成する方法があります。たとえば、 PostMessage Text1.hWnd, WM_KEYDOWN, vbKeyF5, ByVal 0& という操作を行うと、フォーカスが Text1 に無い時であっても、 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Debug.Print KeyCode End Sub にて、vbKeyF5(=116) が押下されたかのように受け取らせる事ができます。 ただしこの方法は、キー入力を"DirectInput"で拾っているようなアプリには 通用しません。SendInput とどちらの方法が良いのかは、ケースバイケースです。 |