2010-12-08 193 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毫秒,或者其他什么。