我想捕获 ctrl/alt/etc 键的起伏,无论我的表单上的哪个控件获得 keyup 或 keydown 事件。由于我的表单上有大约 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 库中。