【问题标题】:Get Mouse Double Click with pyHook使用 pyHook 获取鼠标双击
【发布时间】:2010-12-08 18:18:51
【问题描述】:

我正在尝试使用 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# 键盘/鼠标钩子替代方案作为答案。另一方面,我不确定构建函数来确定双击事件评估两次点击之间的时间是否是一种常见的做法。

【问题讨论】:

  • 尝试在hm = pyHook.HookManager() 语句后添加hm.SubscribeMouseAllButtonsDbl(OnMouseEvent)
  • 我进行了更改,但双击不会显示。我非常感谢您的建议。

标签: c# c++ python winapi


【解决方案1】:

之所以得到两个WM_LBUTTONDOWNWM_LBUTTONUP 而没有WM_LBUTTONDBLCLK 是因为MrZebra 所说:目标窗口类的样式不包括CS_DBLCLKS 样式。除非您可以修改目标窗口类的源代码,否则它永远不会收到WM_LBUTTONDBLCLK,因为 Windows 总是会将双击分解为两次单独的单击。

解决此问题的唯一方法是测量点击之间的时间。如果点击速度足够快,那么就好像您收到了WM_LBUTTONDBLCLK。请参阅this 了解在 Windows 上的双击时间。不要仅仅假设双击是 50 毫秒,或者其他什么。

【讨论】:

  • 非常感谢 Sigvardsson 先生
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2014-11-05
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多