我正在使用teamplayer,它可以让您将更多鼠标连接到您的计算机以同时使用。我还使用 pyHook 来捕获鼠标事件,代码如下:
import pyHook
import pythoncom
def onclick(event):
# called when mouse events are received
print 'MessageName:',event.MessageName
print 'Message:',event.Message
print 'Time:',event.Time
print 'WindowName:',event.WindowName
print 'Position:',event.Position
print '---'
return True
hm = pyHook.HookManager()
hm.MouseLeftDown = onclick
hm.MouseLeftUp = onclick
hm.HookMouse()
pythoncom.PumpMessages()
该代码在没有 teamplayer 的情况下也能正常工作 - 它可以准确地检测鼠标按钮的上下移动。如果我在程序运行时启动 teamplayer,那么它会继续运行良好,这次准确地检测到两只鼠标的点击。
但是,如果我在 teamplayer 启动后启动程序,那么每次鼠标点击都会变成两次:
MessageName: mouse left down
Message: 513
Time: 7231317
WindowName: None
Position: (673, 367)
---
MessageName: mouse left down
Message: 513
Time: 7231317
WindowName: None
Position: (673, 367)
---
MessageName: mouse left up
Message: 514
Time: 7231379
WindowName: None
Position: (673, 367)
---
MessageName: mouse left up
Message: 514
Time: 7231379
WindowName: None
Position: (673, 367)
这没关系 - 我可以检测到具有相同时间戳的点击并忽略第二个点击。但是,当我用不同的鼠标单击时,模式很奇怪:
MessageName: mouse left down
Message: 513
Time: 7305916
WindowName: C:\Python25\python.exe
Position: (569, 306)
---
MessageName: mouse left down
Message: 513
Time: 7305916
WindowName: C:\Python25\python.exe
Position: (722, 365)
---
MessageName: mouse left up
Message: 514
Time: 7309598
WindowName: C:\Python25\python.exe
Position: (722, 365)
---
MessageName: mouse left up
Message: 514
Time: 7309598
WindowName: C:\Python25\python.exe
Position: (722, 365)
也就是说,第一个 down 事件使用最后一个 up 事件的坐标!问题还在于错误的事件是第一个,因此更难检测到正确的事件(我不能只说“忽略第一个事件”,因为如果团队玩家关闭或只连接了一个鼠标,那就是唯一一个! )
关于为什么会发生这种情况的任何想法,以及我能做些什么来获得正常的鼠标事件?