tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 とどちらの方法が良いのかは、ケースバイケースです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。