2010-07-28 5 views
3

Я использую teamplayer, что позволяет подключать больше мышей к вашему компьютеру, которые будут использоваться одновременно. Я также использую pyHook для захвата событий мыши, с помощью следующего кода: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, то каждый MouseClick становится двойной:

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

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

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