4

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