位置容易拿到,事件只能写全局钩子了GetCursorPos VB声明
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
说明
获取鼠标指针的当前位置
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
lpPoint POINTAPI,随同指针在屏幕像素坐标中的位置载入的一个结构
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
说明
获取鼠标指针的当前位置
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
lpPoint POINTAPI,随同指针在屏幕像素坐标中的位置载入的一个结构
解决方案 »
- Collection对象问题
- waveInOpen 怎么选择是声卡 还是 麦克?
- 学习VB还要学什么
- 关于VB中的ComboBox和asp中的select控件的问题
- ●●如何使ListVIew的可编辑(不仅仅是第一列)?
- 求救:小弟需要一个通用查询 的 窗体!(分不够再加)
- 看看这段程序应该运行几遍?
- 怎么实现把一个flexgrid中的某条纪录 拖拽 到 另一个flexgrid中呢 ,help ,高难度高分
- 谁知道,现在这里的VBA论坛怎么没有了!?谁知道哪里有好点的VBA论坛!?
- 用DO......loop while循环语句怎样编写这个程序?
- 谁有activebar的使用方法,一定要中文的。谢谢
- 有关access的一个高难度查询设计
SetWindowsHookEx 函数
WH_MOUSE
WH_MOUSE_LL这两个事件是鼠标的事件
详细内容你可以查看MSDN
Public Const WH_MOUSE_LL = 14
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
'idHook参数代表拦截的类型,主要有键盘、鼠标等(当拦截键盘输入时值为2)
'lpfn参数代表Hook函数的位址
'hmod代表.dll的hInstance
'dwThreadId代表执行拦截的ThreadId
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
Sub EnableHook() '定义EnableHook
'设置拦截
hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub
Sub DisableHook() '定义DisableHook
Dim ret As Long
ret = UnhookWindowsHookEx(hHook) '取消拦截
End Sub
Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
Form1.Text1 = wParam & "-" & lParam
Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function下面是Form1的事件,注要有一个Text控件
Private Sub Form_Load()
Call EnableHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call DisableHook
End Sub
欢迎访问我的小站
http://lihuasoft.go163.net
GetCursorPos(p as POINTAPI)
钩子是你自己编写的程序代码!用来拦截系统的消息!
按下Command1时,用Picture1来捕捉鼠标事件,当鼠标
移动时,动态显示按下位置的窗口ID及鼠标坐标;
按下Command2时,恢复正常。Option ExplicitPrivate Declare Function SetCapture Lib "user32" ( _
ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" ( _
lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPointXY Lib "user32" _
Alias "WindowFromPoint" (ByVal xPoint As Long, _
ByVal yPoint As Long) As LongPrivate Type POINTAPI
X As Long
Y As Long
End TypePrivate m_Picking As BooleanPrivate Sub Command1_Click()
m_Picking = True
Call SetCapture(Picture1.hwnd)
End SubPrivate Sub Command2_Click()
m_Picking = False
Call ReleaseCapture
End SubPrivate Sub Picture1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
'自己的处理程序
End SubPrivate Sub Picture1_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
'自己的处理程序
End SubPrivate Sub Picture1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Dim pt As POINTAPI
Dim hwnd As Long
If m_Picking Then
Call GetCursorPos(pt)
hwnd = WindowFromPointXY(pt.X, pt.Y)
Me.Caption = Hex(hWnd) & " -- " & pt.X & "," & pt.Y
End If
End Sub
Dim kk As mPoint ' tagKBDLLHOOKSTRUCT
Dim kb As Long, pks As Byte
Dim pt As tarPoint
'Debug.Print wParam
CopyMemory kk, ByVal lParam, Len(kk)
CopyMemory pt, ByVal VarPtr(kk.pt), Len(pt)
Form1.Text1 = wParam & ";X=" & pt.X & ";Y=" & pt.Y
Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
函数的使用见FreshAir(FreshAir)的内容