私は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の起動後にプログラムを起動すると、すべてのマウスクリックが2倍になります。
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)
これは問題ありません。同じタイムスタンプのクリックを検出し、2番目のクリックを無視することができます。ただし、別のマウスでクリックすると、パターンが奇妙になります。
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)
つまり、最初のダウンイベントは、最後のアップイベントの座標を使用します。問題は、間違ったイベントが最初に発生し、正しいイベントを検出するのが難しくなることです(チームプレーヤーがオフになっている場合、またはマウスが1つしか接続されていない場合は、それだけであるため、「最初のイベントを無視する」とは言えません。 )。
なぜこれが起こっているのか、そして通常のマウスイベントを取得するために私ができることについてのアイデアはありますか?