2010-07-28 5 views
3

J'utilise teamplayer, qui vous permet de connecter plus de souris à votre ordinateur pour une utilisation simultanée. J'utilise aussi pyHook pour capturer les événements de la souris, avec le code suivant:teamplayer et pyhook interagissent étrangement

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() 

Le code fonctionne très bien sans teamplayer - il détecte le bouton de la souris vers le bas et avec précision. Si je démarre teamplayer pendant que le programme est en cours d'exécution, alors il continue à bien fonctionner, cette fois en détectant les clics des deux souris avec précision.

Cependant, si je commence le programme après teamplayer est démarré, puis tous les mouseclick devient double:

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) 

Ce serait OK - je pourrais détecter les clics avec le même horodatage et ignorer le second. Cependant, lorsque je clique avec une autre souris, le modèle est étrange:

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) 

C'est le premier événement vers le bas utilise les coordonnées du dernier événement up! Le problème est aussi que le mauvais événement est le premier, rendant plus difficile de détecter le bon (je ne peux pas dire "ignorer le premier événement", car si le joueur d'équipe est éteint ou qu'une seule souris est connectée, c'est le seul!

Des idées sur les raisons pour lesquelles cela pourrait se produire et sur ce que je peux faire pour obtenir des événements de souris normaux?

Répondre

1

idées multiples:

  • DETECT clics en double de la même horodatage, et ne tiennent pas compte du premier d'entre eux. Cela nécessiterait de retarder le traitement jusqu'à ce qu'une coche plus tard, ce qui complique légèrement les choses dans votre code ...
  • Vous pouvez modifier la source pyhook pour gérer les doublons à la place; le débogage à l'intérieur de leur code source peut vous donner plus d'informations sur ce qui se passe. En l'examinant brièvement, vous pouvez le faire dans la fonction MouseSwitch de HookManager en mettant en file d'attente et en vidant les messages. Une fois que vous avez déterminé ce qui se passe, vous pouvez enrouler cet objet sans avoir à modifier pyhook
  • Il est très probable que l'API SetWindowsHookEx génère les événements en double; parce que teamplayer fait quelque chose de compliqué avec plusieurs souris. Signalez ceci à teamplayer; ils peuvent à un moment être intéressés à le fixer de leur côté
Questions connexes