有什么方法可以找出鼠标事件从哪里来的? 我的意思是,如果我在Windows上编写一个C / C ++程序,并获得一个鼠标点击事件,我怎么才能find这个事件是来自鼠标驱动程序,触摸板,还是应用程序发送(鼠标事件通过发送适当的消息,如WM_LBUTTONDOWN模拟)。
谢谢你的帮助 :)
这对于用户模式下的应用程序是不可能的 – 鼠标事件通常不提供有关事件源的记录信息。 Win32 API函数GetMessageExtraInfo有获得一些消息额外信息的方法,但没有安全的方法来解释这些数据。 这是非常设备特定的,没有记录,永远不会保证永远存在。
要解决此任务,您需要基于Windows DDK示例开发自己的鼠标过滤器驱动程序 。
它的回调有输入参数MOUSE_INPUT_DATA
– 包含鼠标事件信息的结构。 有UnitId
字段:
UnitId指定鼠标设备的单元号。 鼠标设备名称的格式为
\Device\PointerPortN
,其中后缀N是设备的单元号。 例如,名称为\Device\PointerPort0
的单元号为零,而名称为\Device\PointerPort1
的单元号为1。
GetAsyncKeyState函数可以用来检查按钮是否被按下,不幸的是SendInput不能欺骗这个函数。 所以你可以模拟鼠标点击,但程序可以检查按钮是否真的被按下。
所以创建自己的鼠标驱动程序更好。 我需要一个安全的方式,以模拟我的机器人的鼠标/键盘行为,我写了一篇详细的文章在我的博客http://poker-botting.blogspot.fr/2012/11/how-to-simulate-mouse-and- keyboard.html