4

フォームのどのコントロールが keyup または keydown イベントを取得しても、ctrl/alt/etc キーの上下をキャプチャしたいと考えています。フォームには約 100 個のコントロールがあるため、個々のコントロールにコードを追加するとなると、非常に見苦しくなります。それをしなくてもどうすればこれを達成できますか?

SetWindowsHookPS:との違いは何SetWindowsHookExですか?

4

1 に答える 1

10

各 FormのKeyPreviewプロパティをTrueに設定する必要があります。その後、個々のコントロール レベルに加えて、フォーム レベルでキーボード イベントをキャッチできます。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "Form_KeyDown"
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    Debug.Print "Form_KeyPress"
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "Form_KeyUp"
End Sub

基本的に、フォームはコントロールの前に各キーボード イベントの「プレビュー」を取得します。

Form_KeyDown
Control_KeyDown
Form_KeyUp
Control_KeyUp

SetWindowsHook と SetWindowsHookEx については、前者が元の Win16 API 呼び出しで、後者が Win32 および Win64 API 呼び出しです。私の知る限り、SetWindowsHook は非推奨であり、現在の MSDN ライブラリには含まれていません。

于 2012-07-08T14:28:10.933 に答える