上一篇 | 下一篇

如何使Mouse的右键无效(Mouse Hook)

发布: 2008-6-26 09:04 | 作者: admin | 来源: | 查看: 1次

让Mouse的右键无效,其实也就是拦截WM_RBUTTONDOWN/WM_RBUTTONUP,但是,如果只针

对某个Window/有hWnd的控制项,那便是使用SubClass来做,如果针对的是整个Process

那麽,用Mouse Hook比较好,然而这只针对单一个Process,而如何让所有的Process都

如此,那得使用Remote的Mouse Hook,但这是要放在.Dll之中,而单纯用VB来做我没有

试出来。

'以下在Form

Private Sub Form_Load()

Call EnableHook

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Debug.Print X; Y

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

Debug.Print X; Y

End Sub

Private Sub Form_Unload(Cancel As Integer)

Call FreeHook

End Sub

'以下在.Bas

Public Const WH_MOUSE = 7

Public Const WM_RBUTTONDOWN = &H204

Public Const HC_ACTION = 0

Public Const WM_RBUTTONUP = &H205

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

Declare Function UnhookWindowsHookEx Lib "user32" _

(ByVal hHook As Long) As Long

Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _

ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _

(lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)

Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Public theForm As Form

Public hHook As Long ' handle of Hook Procedure

Sub EnableHook()

If hHook = 0 Then

hHook = SetWindowsHookEx(WH_MOUSE, AddressOf MouseHookProc, App.hInstance, 0)

End If

End Sub

Sub FreeHook()

Dim ret As Long

If hHook <> 0 Then

ret = UnhookWindowsHookEx(hHook)

hHook = 0

End If

End Sub

Function MouseHookProc(ByVal code As Long, ByVal wParam As Long, _

ByVal lParam As Long) As Long

If code < 0 Then

MouseHookProc = CallNextHookEx(hHook, code, wParam, lParam)

Exit Function

End If

If wParam = WM_RBUTTONDOWN Or wParam = WM_RBUTTONUP Then

MouseHookProc = 1 '表示不处理这个讯息

Exit Function

End If

MouseHookProc = 0 '表示要处理这个讯息

Call CallNextHookEx(hHook, code, wParam, lParam)

End Function

字号: | 推荐给好友

评分:0

我来说两句