我正在尝试使用 pyHook 获得鼠标双击,但我得到的是两对单击条目,例如WM_LBUTTONDOWN (0x201) 和 WM_LBUTTONUP (0x202) 。我期待 WM_LBUTTONDBLCLK (0x203)。我在这里错过了什么?
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,但实际上我得到了前两个。
我在 Win7x64 上使用 Python 2.7 和 pyHook 1.5.1
ReEdit:我将考虑使用 C++/C# 键盘/鼠标钩子(Hook)替代方案作为答案。另一方面,我不确定构建函数来确定计算两次点击之间时间的双击事件是否是一种常见做法。
最佳答案
你得到两个 WM_LBUTTONDOWN
和 WM_LBUTTONUP
而没有 WM_LBUTTONDBLCLK
的原因是因为 MrZebra 所说:目标窗口类的样式不包括 CS_DBLCLKS
样式。除非您可以修改目标窗口类的源代码,否则它永远不会收到 WM_LBUTTONDBLCLK
,因为 Windows 总是会将双击分成两次单独的单击。
解决此问题的唯一方法是测量点击之间的时间。如果点击速度足够快,那么就好像您收到了 WM_LBUTTONDBLCLK
一样。参见 this用于读取 Windows 上的双击时间。不要只是假设双击是 50 毫秒或其他时间。
关于c# - 使用pyHook获取鼠标双击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390845/