开发者

Get Mouse Double Click with pyHook

I'm trying to get Mouse Double Clicks with pyHook, but instead I'm getting two pair entries of single clicks e.g. WM_LBUTTONDOWN (0x201) and WM_LBUTTONUP (0x202) . I'm expecting WM_LBUTTONDBLCLK (0x203). What am I misssing here?

import pythoncom, pyHook

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

hm = pyHook.HookManager()
hm.MouseAll = OnMouseE开发者_高级运维vent
hm.HookMouse()
pythoncom.PumpMessages()

I've found this hint: In this post MrZebra says: "For this (0x203) to be sent, your window class needs to be created with the CS_DBLCLKS class style"

Edit: This page indicates that doubleclicking will generate these 4 msgs: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP, but I actually get the first two twice.

I'm using Python 2.7 and pyHook 1.5.1 on Win7x64

ReEdit: I'll consider as answers C++/C# Keyboard/Mouse hooks alternatives. On the other hand, I'm not sure if it is a common practice to build functions to determine the double click event evaluating the time between two clicks.


The reason why you are getting two WM_LBUTTONDOWN and WM_LBUTTONUP and no WM_LBUTTONDBLCLK is because of what MrZebra says: the target window class' style does not include the CS_DBLCLKS style. Unless you can modify the source code for the target window class, it will never receive WM_LBUTTONDBLCLK, because Windows will always break the double clicks into two separate clicks.

The only way to resolve this, is to measure the time between clicks. If the clicks come fast enough, then act as if you have received WM_LBUTTONDBLCLK. See this for reading the double click time on Windows. Don't just assume that double clicks are 50 ms, or whatever.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜