|
比较通用的就用SetWindowsHookEx,下面两种都行
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseHookProc, OfficeApp.hInstance, 0)
hMouseHook = SetWindowsHookEx(WH_MOUSE, AddressOf MouseHookProc, OfficeApp.hInstance, 0)
代码要封装到dll中。
参考:
SetWindowsHookExA function (winuser.h) - Win32 apps | Microsoft Docs
WH_MOUSE_LL HOOK的大概框架如下
Private 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 '设置钩子
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hMouseHook As Long) As Long '注消钩子,用完后一定要注销
Private Declare Function CallNextHookEx Lib "user32" (ByVal hMouseHook As Long, ByVal ncode As Long, _
ByVal wParam As Long, lParam As Any) As Long '如果有其它钩子,则继续执行
'Private Type POINTAPI
' x As Long
' y As Long
'End Type
Private Type MSLLHOOKSTRUCT
pt As POINTAPI
mouseData As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type
Private Const WM_MOUSEWHEEL = &H20A
Private Function MouseHookProc(ByVal ncode As Long, ByVal wParam As Long, lParam As MSLLHOOKSTRUCT) As Long
'收到WM_MOUSEMOVE消息时写入光标坐标数据
MouseHookProc = CallNextHookEx(hMouseHook, ncode, wParam, lParam) '如果有其它钩子,则继续执行,不然要出错
End function
|
|