c# - 使用pyHook获取鼠标双击

标签 c# c++ python winapi

我正在尝试使用 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_LBUTTONDOWNWM_LBUTTONUP 而没有 WM_LBUTTONDBLCLK 的原因是因为 MrZebra 所说:目标窗口类的样式不包括 CS_DBLCLKS 样式。除非您可以修改目标窗口类的源代码,否则它永远不会收到 WM_LBUTTONDBLCLK,因为 Windows 总是会将双击分成两次单独的单击。

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

关于c# - 使用pyHook获取鼠标双击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390845/

相关文章:

c# - 我们应用程序中的主机单元测试框架? (Nunit、xUnit、MsTest)

c# - 如何对 Unit 类型的值进行数学运算?

c++ - std::unique_ptr 取得所有权前的测试

c++ - Windows 上的 Bonjour/DNS-SD

c++ - 命名函数参数与类成员相同

c# - 如何使用 ASP.NET Core 获取另一个用户的声明

python - 如何重新开始游戏?

python - HTTP异常 : Deadline exceeded while waiting for HTTP response from URL

python - 为什么 Sqlite 在我明明创建时告诉我不存在这样的列?

c# - 在 ASP.NET 中构建 SiteMap