如何找到鼠标事件的来源?

时间:2012-09-27 13:17:37

标签: c++ c windows mouse

有没有办法找出鼠标事件的来源? 我的意思是,如果我在Windows上编写C / C ++程序并在其上获得鼠标单击事件,我怎么能找到这个事件是来自鼠标驱动程序,触摸板还是应用程序发送的事件(鼠标事件)通过发送适当的消息来模拟,如WM_LBUTTONDOWN)。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

对于用户模式下的应用程序,这是不可能的 - 鼠标事件通常不提供有关事件源的文档信息。有一种方法可以通过Win32 API函数GetMessageExtraInfo获取一些消息额外信息,但是没有安全的方法来解释这些数据。它是非常特定于设备的,没有文档记录,永远不会保证永远存在。

要解决此任务,您需要根据Windows DDK示例开发自己的Mouse Filter driver

它的回调有输入参数MOUSE_INPUT_DATA - 包含鼠标事件信息的结构。字段UnitId

  

UnitId 指定鼠标设备的单元号。鼠标设备名称的格式为\Device\PointerPortN,其中后缀N是设备的单元号。例如,名称为\Device\PointerPort0的设备的单元号为零,名称为\Device\PointerPort1的设备的单元号为1.

答案 1 :(得分:0)

GetAsyncKeyState函数可用于检查按钮是否被按下,不幸的是SendInput无法欺骗此功能。 因此,您可以模拟鼠标单击,但程序可以检查按钮是否真的被按下了。

因此,创建自己的鼠标驱动程序会更好。 我需要一种安全的方式来模拟我的机器人的鼠标/键盘行为,我在我的博客上写了一篇详细的文章http://poker-botting.blogspot.fr/2012/11/how-to-simulate-mouse-and-keyboard.html