2024年6月15日发(作者:)

VB 全局Hook鼠标钩子,获取鼠标单击左键、鼠标

坐标位置等。

以下是鼠标的按键消息:

键 按下 释放 按下(双击)

左 WM_NCLBUTTONDOWN=&HA1 WM_NCLBUTTONUP=&HA2 WM_NCLBUTTONDBLCLK=&HA3

中 WM_NCMBUTTONDOWN=&HA7 WM_NCMBUTTONUP=&HA8 WM_NCMBUTTONDBLCLK=&HA9

右 WM_NCRBUTTONDOWN=&HA4 WM_NCRBUTTONUP=&HA5 WM_NCRBUTTONDBLCLK=&HA6

form:

VBScript code复制代码

Private Sub Form_Load()

HooK

End Sub

Private Sub Form_Unload(Cancel As Integer)

UnHooK

End Sub

Module:

VBScript code复制代码

Private Declare Function CallNextHookEx Lib "user32" _

(ByVal hHook As Long, _

ByVal nCode As Long, _

ByVal wParam As Long, _

lParam As Any) As Long

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 hHook As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" _

Alias "RtlMoveMemory" _

(Destination As Any, _

Source As Any, _

ByVal Length 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_LBUTTONUP = &H202

Private Const WH_MOUSE_LL = 14

Private hHook As Long

Public Function MouseHook(ByVal nCode As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long

Dim mhs As MSLLHOOKSTRUCT, pt As POINTAPI

If wParam = WM_LBUTTONUP Then

Call CopyMemory(mhs, ByVal lParam, LenB(mhs))

pt =

Call CopyMemory(p, ByVal lParam, Len(p))

"左键单击 坐标:" & pt.x & " "; pt.y

End If

Call CallNextHookEx(hHook, nCode, wParam, lParam)

End Function

Public Sub HooK()

hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseHook,

nce, 0)

End Sub

Public Sub UnHooK()

Call UnhookWindowsHookEx(hHook)

End Sub