VB鼠标钩子的问题

在我的程序中用到了一个鼠标滚轮钩子,但是如果同时运行两个程序,就只有其中一个的钩子有效,另一个不起作用。并且更烦人的是,这个钩子好像是时刻监控的,即便我的程序最小化了,或者是失去焦点了,滚动鼠标,依然会被这个钩子拦截到。
下面放上代码:
初始化中的加载:
HookId = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, 0) '加载钩子
以下代码在一个模块中:
Public Function MouseProc(ByVal ncode As Long, ByVal wp As Long, ByVal lp As Long) As Long
Dim ll As MSLLHOOKSTRUCT
If wp = WM_MOUSEWHEEL Then
CopyMemory ll, lp, Len(ll)
If ll.deltax < 0 Then
MoveUp = False
Else
MoveUp = True
End If
EventRaised = True
End If
MouseProc = CallNextHookEx(HookId, ncode, wp, lp)
End Function

各位救命啊!!小弟分不多,但如能解决一定追加高分
有没有办法使Hook不全局拦截啊??

使用子类化,而不是使用全局钩子。
如果非得使用全局钩子,那可以在程序最小化or失去焦点时取消Hook。

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_WNDPROC = (-4)
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_MOUSEWHEEL = &H20A

初始化:
lHwnd=Frm.hWnd '你的窗体
sHwnd=SetWindowLong(lHwnd, GWL_WNDPROC, AddressOf MouseProc)
结束:
Call SetWindowLong(lhWnd, GWL_WNDPROC, sHwnd)

Public Function MouseProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_MOUSEWHEEL Then
Select Case wParam
Case &H780000 '向上滚
MoveUp = True
Case &HFF880000 '向下滚
MoveUp = False
End Select
EventRaised = True
End If
MouseProc = CallWindowProc(sHwnd, hWnd, Msg, wParam, lParam)
End Function
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-13
本来钩子就是只能有一个有效,而且是全局的,当然会在的最小化后也有效了