User32.dll 鼠标事件

Posted

技术标签:

【中文标题】User32.dll 鼠标事件【英文标题】:User32.dll mouse events 【发布时间】:2012-02-01 01:36:33 【问题描述】:

我正在查看一个光标控制类,我正在尝试使其适应我的程序。我让它按我的意愿工作,但我不确定这些数字在这种情况下意味着什么。任何人都可以阐明 0x01 等的含义。

    private const int MouseEventMove = 0x01;
    private const int MouseEventLeftDown = 0x02;
    private const int MouseEventLeftUp = 0x04;
    private const int MouseEventRightDown = 0x08;
    private const int MouseEventRightUp = 0x10;
    private const int MouseEventAbsolute = 0x8000;

谢谢。

【问题讨论】:

这些是 Windows 消息代码。如果发生相关事件,Windows 将发送这些代码。 对不起我的错误。他们是旗帜吧?正如@Hans Passant 所说。 【参考方案1】:

这些是标志枚举。 它们每个都被赋予一个 2 的幂的值,因此对于任何组合值,设置哪个标志都不会有歧义。

来自 MSDN:

标志枚举用于屏蔽位字段并按位进行 比较。它们是多个时使用的正确设计 枚举值可以同时指定。

http://msdn.microsoft.com/en-us/library/ms229062.aspx

在您的特定情况下,枚举似乎描述了正在发生的鼠标事件类型。

编辑:正如 Hans 所指出的,这在技术上不是一个枚举,而是一组 const int 定义,尽管出于所有实际目的,我觉得它是一个枚举 - 为整数值提供人类可读的标签。有没有更合适的名字?

【讨论】:

实际上不是。这些值在 Windows SDK 标头中使用 #define 声明。因此翻译成 const int. @Hans - 你是对的,尽管出于所有功能目的,它们都用作枚举。你会怎么称呼这样一组 const ints?【参考方案2】:

这些是您传递给mouse_event() Windows api 函数的 MOUSEEVENTF 标志的值。标志值在 WinUser.h Windows SDK 头文件中声明。如链接的 MSDN 文章中所述,您不应再使用此功能。

访问 pinvoke.net 以获得正确的 SendInput() 声明。

【讨论】:

嗨,汉斯。是的,我使用的代码确实使用了 SendInput 方法,但它仍然需要这些标志。感谢您对进一步阅读材料的建议。

以上是关于User32.dll 鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

获取鼠标双击时间间隔

User32.dll 的 SendMessage 方法返回错误的 ListViewGroup id

无边框窗体和用户控件以及权限

兼容各个浏览器:禁止鼠标选择文字事件

如何使用 WinApi/user32.dll 或类似的东西远程执行 ListBox 的 ListBox1_DoubleClick 事件?

C#运行时鼠标移动控件 - 调用Windows API(ReleaseCapture)