参考下面的例子,是在2000下监视用户鼠标和键盘的操作,你可以稍加修改: ==================================== ''form1: Sub form_load() lMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf LowLevelMouseProc, App.hInstance, 0) lKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0) End SubPrivate Sub Form_Unload(Cancel As Integer) If lMouseHook <> 0 Then UnhookWindowsHookEx lMouseHook End If
If lKeyBoardHook <> 0 Then UnhookWindowsHookEx lKeyBoardHook End IfEnd Sub================================================================ 'module1: 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 LongPublic Const HC_ACTION = 0 Public Const WH_KEYBOARD_LL = 13 Public Const WH_MOUSE_LL = 14'鼠标消息 Public Const WM_RBUTTONUP = &H205 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_MOUSEWHEEL = &H20A Public Const WM_MOUSEMOVE = &H200'键盘消息 Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public lMouseHook As Long, lKeyBoardHook As LongPublic Function LowLevelMouseProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If code = HC_ACTION Then Select Case wParam Case WM_MOUSEMOVE Form1.Text1 = "mouse MOVE" Case WM_RBUTTONUP Form1.Text1 = "mouse RBUTTONUP" Case WM_RBUTTONDOWN Form1.Text1 = "mouse RBUTTONDOWN" Case WM_LBUTTONUP Form1.Text1 = "mouse LBUTTONUP" Case WM_LBUTTONDOWN Form1.Text1 = "mouse LBUTTONDOWN" Case WM_MOUSEWHEEL Form1.Text1 = "mouse MOUSEWHEEL" End Select End If If code <> 0 Then LowLevelMouseProc = CallNextHookEx(0, code, wParam, lParam) End If
End Function Public Function LowLevelKeyboardProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If code = HC_ACTION Then Select Case wParam Case WM_KEYDOWN Form1.Caption = "key down" Case WM_KEYUP Form1.Caption = "key up" End Select End If
If code <> 0 Then LowLevelKeyboardProc = CallNextHookEx(0, code, wParam, lParam) End IfEnd Function
Windows钩子函数是SetWindowsHookEx,你马上会发现不能达到限制用户输入的目的的。
UnhookWindowsHookEx hHook
只能算是马马虎虎吧,你去搜索下,很多讨论这问题的,都是没有下文的
====================================
''form1:
Sub form_load()
lMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf LowLevelMouseProc, App.hInstance, 0)
lKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End SubPrivate Sub Form_Unload(Cancel As Integer)
If lMouseHook <> 0 Then
UnhookWindowsHookEx lMouseHook
End If
If lKeyBoardHook <> 0 Then
UnhookWindowsHookEx lKeyBoardHook
End IfEnd Sub================================================================
'module1:
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 LongPublic Const HC_ACTION = 0
Public Const WH_KEYBOARD_LL = 13
Public Const WH_MOUSE_LL = 14'鼠标消息
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_MOUSEWHEEL = &H20A
Public Const WM_MOUSEMOVE = &H200'键盘消息
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public lMouseHook As Long, lKeyBoardHook As LongPublic Function LowLevelMouseProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If code = HC_ACTION Then
Select Case wParam
Case WM_MOUSEMOVE
Form1.Text1 = "mouse MOVE"
Case WM_RBUTTONUP
Form1.Text1 = "mouse RBUTTONUP"
Case WM_RBUTTONDOWN
Form1.Text1 = "mouse RBUTTONDOWN"
Case WM_LBUTTONUP
Form1.Text1 = "mouse LBUTTONUP"
Case WM_LBUTTONDOWN
Form1.Text1 = "mouse LBUTTONDOWN"
Case WM_MOUSEWHEEL
Form1.Text1 = "mouse MOUSEWHEEL"
End Select
End If If code <> 0 Then
LowLevelMouseProc = CallNextHookEx(0, code, wParam, lParam)
End If
End Function
Public Function LowLevelKeyboardProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If code = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN
Form1.Caption = "key down"
Case WM_KEYUP
Form1.Caption = "key up"
End Select
End If
If code <> 0 Then
LowLevelKeyboardProc = CallNextHookEx(0, code, wParam, lParam)
End IfEnd Function