头一次遇到这样的问题!!!
简单的测试代码:一个定时器和一个鼠标钩子,结果2种途径得到的鼠标位置不一致!!很奇怪。。。。。
窗体代码:
模块中代码:
窗体代码:
Option Explicit
Private Sub Form_Load()
MouseHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnMouseHook
End Sub
Private Sub Timer1_Timer()
Dim lp As PointAPI
GetCursorPos lp
Lab.Caption = lp.X & "," & lp.Y
End Sub
模块中代码:
Option Explicit
''使用鼠标钩子在Module模块里:
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 Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WH_KEYBOARD_LL = 13
Private Const WH_MOUSE_LL = 14 '消息
Private Const HC_ACTION = 0
Private Const HC_SYSMODALOFF = 5
Private Const HC_SYSMODALON = 4 '鼠标消息
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MOUSEACTIVATE = &H21
Private Const WM_MOUSEFIRST = &H200
Private Const WM_MOUSELAST = &H209
Private Const WM_MOUSEWHEEL = &H20A
Public Type PointAPI
X As Long
Y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long
Public lMouseHook As Long
Public Sub MouseHook()
lMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf CallMouseHookProc, App.hInstance, 0)
End Sub
'卸钩子
Public Sub UnMouseHook()
UnhookWindowsHookEx lMouseHook
End Sub
'鼠标钩子
Public Function CallMouseHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If code = HC_ACTION Then '下面是鼠标的消息类型,你想怎么做就怎么做...
Select Case wParam
Case WM_MOUSEMOVE
Dim lp As PointAPI
GetCursorPos lp
Form1.Caption = lp.X & "," & lp.Y
Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
Case WM_LBUTTONDBLCLK
Case WM_RBUTTONDOWN
Case WM_RBUTTONUP
Case WM_RBUTTONDBLCLK
Case WM_MBUTTONDBLCLK
Case WM_MBUTTONUP
Case WM_MOUSEACTIVATE
Case WM_MOUSEFIRST
Case WM_MOUSELAST
Case WM_MOUSEWHEEL
End Select
End If
If code <> 0 Then
CallMouseHookProc = CallNextHookEx(0, code, wParam, lParam)
End If
End Function
...全文
相关推荐
综放工作面大断面皮带机头硐室一次成巷技术
"综放工作面大断面皮带机头硐室一次成巷技术"综放工作面大断面皮带机头硐室一次成巷技术是煤炭开采领域中一项重要的技术创新,尤其在处理坚硬厚煤层的工作面时,这种技术显得尤为重要。传统的二次成巷方式在面
一年级奥数锯木头问题PPT学习教案.pptx
首先,PPT强调了一个基本概念:锯一次木头可以将木头分为两截。通过递增的次数(一次、两次、三次等),孩子们可以理解到锯的次数与木头截数之间的关系——段数等于锯次加1。
什么是BOM头?如何去除文件中的BOM头
**兼容性问题**:不是所有的软件都支持或者正确处理BOM头,尤其是旧版本的工具或不常用的语言。3.
什么是BOM头,如何去掉BOM头.zip
尽管BOM头对于某些程序来说是有用的,但它可能会引起一些问题,尤其是在处理文本文件或网页时。**BOM头的问题**1.
UTF-8去BOM头工具
**批量处理**:对于大量文件,工具可能提供批量处理功能,一次性去除多个文件的BOM头,节省用户的时间。


API
