フォームのどのコントロールが keyup または keydown イベントを取得しても、ctrl/alt/etc キーの上下をキャプチャしたいと考えています。フォームには約 100 個のコントロールがあるため、個々のコントロールにコードを追加するとなると、非常に見苦しくなります。それをしなくてもどうすればこれを達成できますか?
SetWindowsHook
PS:との違いは何SetWindowsHookEx
ですか?
各 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 ライブラリには含まれていません。