Тимплеер и Pyhook странно взаимодействуют - PullRequest
3 голосов
/ 29 июля 2010

Я использую 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 выключен или подключена только одна мышь, это единственное! )

Есть какие-нибудь идеи относительно того, почему это может происходить, и что я могу сделать, чтобы получить нормальные события мыши?

1 Ответ

1 голос
/ 06 декабря 2010

Несколько идей:

  • Обнаружение повторных нажатий с одной и той же отметки времени и игнорирование первого из них. Это потребует отсрочки обработки до следующего раза, что немного усложнит ваш код ...
  • Вы можете изменить источник pyhook для обработки дубликатов; отладка внутри их исходного кода может дать вам более полное представление о том, что происходит. Кратко рассмотрев его, вы можете сделать это с помощью функции HookManager MouseSwitch, ставя в очередь и сбрасывая сообщения. После того, как вы выясните, что там происходит, вы можете обернуть этот объект, чтобы вам не нужно было изменять pyhook
  • Скорее всего, API SetWindowsHookEx - это то, что генерирует повторяющиеся события; потому что teamplayer делает что-то сложное с несколькими мышами. Сообщите об этом командному игроку; в какой-то момент они могут быть заинтересованы в том, чтобы починить его со своей стороны
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...