2010-07-28 67 views
3

我使用teamplayer,它可以讓你連接更多的鼠標到你的電腦同時使用。我還使用pyHook捕捉鼠標事件,用下面的代碼:團隊合作伙伴和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開始後的程序,那麼每點擊鼠標變成雙:

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來源來處理重複;在其源代碼中進行調試可能會讓您更深入地瞭解發生的事情。從簡短的看它,你可以通過排隊和刷新消息在HookManagerMouseSwitch函數中做到這一點。一旦你弄清楚發生了什麼,你可以包裝這個對象,所以你不必修改它。SetWindowsHookEx API很可能是生成重複事件的API;因爲團隊合作者正在做一些與多個老鼠相關的事情。向團隊合作伙伴報告;他們可能在某些時候有興趣將其從它們的側面固定