我想捕获ctrl / alt / etc键的起伏,无论我的表单上的哪个控件获取keyup或keydown事件。由于我的表单上有大约100个控件,如果我要为每个单独的控件添加代码,那将会非常难看。如何在不必这样做的情况下实现这一目标?
PS:SetWindowsHook
和SetWindowsHookEx
之间有什么区别?
答案 0 :(得分:10)
您需要将每个表单的 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库中。