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 事件?