2010-12-08 168 views
2

我試圖讓鼠標雙擊與pyHook,但相反,我得到兩個單擊一對單擊例如WM_LBUTTONDOWN(0x201)和WM_LBUTTONUP(0x202)。我期待WM_LBUTTONDBLCLK(0x203)。我在這裏誤解了什麼?獲取鼠標雙擊pyHook

import pythoncom, pyHook 

def OnMouseEvent(event):   
    print event.Message, event.Position 
    return True 

hm = pyHook.HookManager() 
hm.MouseAll = OnMouseEvent 
hm.HookMouse() 
pythoncom.PumpMessages() 

我發現這個提示:在this post MrZebra說:「對於這個(0x203)發送,你的窗口類需要的CS_DBLCLKS類樣式創建」

編輯This page表示雙擊將生成這4個消息:WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK和WM_LBUTTONUP,但實際上我得到了前兩次兩次。

我使用Python 2.7和pyHook 1.5.1 Win7x64

重新編輯:我會考慮的答案C++/C#鍵盤/鼠標掛鉤的替代品。另一方面,我不確定構建函數來確定評估兩次點擊之間的時間的雙擊事件是否是常見做法。

+0

嘗試在`hm = pyHook.HookManager()`語句之後添加`hm.SubscribeMouseAllButtonsDbl(OnMouseEvent)`。 – martineau 2010-12-08 23:45:57

+0

我做了更改,但雙擊不會顯示。我提出了很多建議。 – 2010-12-09 02:14:08

回答

1

爲什麼你獲得兩個WM_LBUTTONDOWNWM_LBUTTONUP沒有WM_LBUTTONDBLCLK的原因是什麼MrZebra說:目標窗口類風格不包括CS_DBLCLKS風格。除非您可以修改目標窗口類的源代碼,否則它永遠不會收到WM_LBUTTONDBLCLK,因爲Windows始終將雙擊分爲兩次單獨的點擊。

解決此問題的唯一方法是測量點擊之間的時間。如果點擊速度足夠快,那麼就好像您已收到WM_LBUTTONDBLCLK一樣。請參閱this以閱讀Windows上的雙擊時間。不要只假定雙擊是50毫秒,或者其他什麼。