0

您可能会弄清楚我为什么要问这个问题。即使没有,也很简单。我的问题是是否可以在自己的应用程序上检测到 SetCursorPos() 的使用,而无需扫描其他正在运行的应用程序以查找对此 API 的任何调用。

例如,如果我将光标放在一个窗口中并调用 SetCursorPos(),那么这个窗口是否可以知道光标位置不是直接来自鼠标(原始输入)?

我并没有忘记这样一个事实,即您可以通过检查位置的变化来“知道”鼠标输入是否是原始的。例如,如果位置从 100(X) 和 100(Y) 变为 500(X) 和 500(Y),而没有在这两个位置之间移动,那么可以肯定的是,鼠标位置发生了变化。

如果你们中的任何人都知道一种产生“原始鼠标输入”的方法,而没有任何应用程序能够区分函数输出和鼠标输出之间的区别——如果有这样的区别——那么d 也足够了。

当然,每当我移动鼠标时,我使用的操作系统都会检测到这一点,然后相应地移动光标。在实践中,我应该能够根据自己的意愿更改这个低级功能吗?

4

1 回答 1

1

窗口无法直接确定鼠标的移动方式。外部应用程序可能正在使用SetCursorPos(),但它们也可能使用较低级别的函数,例如mouse_event()or SendInput()。当通知到达目标窗口时,操作系统已经对数据进行了规范化,并且任何源信息都丢失了如果您确实需要检测使用SetCursorPos()或其他功能,则必须在每个正在运行的进程中直接挂钩这些功能。或者,您可以尝试通过注册“原始输入”RegisterRawInputDevices()并查看是否从鼠标硬件直接获得相应的通知,假设那些模拟功能也不会触发原始通知。

于 2012-12-10T18:41:18.077 回答