有时候我们会想要禁止键盘操作,也就是无论键盘上的什么按键被按下,都不会有响应。
根据如何在vba中用钩子hook监视键盘的按键?一文,我们可以通过钩子hook屏蔽所有键盘的按键。
代码如下:
Public hHook As Long Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long Public Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long Const WH_KEYBOARD = 2 Sub BeginHK() i = GetCurrentThreadId hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0, i) End Sub Public Function KeyboardProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If code < 0 Then KeyboardProc = CallNextHookEx(hHook, code, wParam, lParam) Else '将钩子程序的返回值设置为非0,表示钩子程序处理了这个消息,不继续发送到目标窗口程序 '就可以屏蔽所有键盘的按键 KeyboardProc = 1 End If End Function Sub EndHK() UnhookWindowsHookEx hHook End Sub
如果想只屏蔽某个按键呢?