Я использую 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, то каждый щелчок мышью становится двойным:
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)
То есть первое событие «вниз» использует координаты последнего события «вверх»! Проблема также в том, что сначала происходит неправильное событие, что затрудняет его обнаружение (я не могу просто сказать «игнорировать первое событие», потому что, если teamplayer выключен или подключена только одна мышь, это единственное! )
Есть какие-нибудь идеи относительно того, почему это может происходить, и что я могу сделать, чтобы получить нормальные события мыши?