检测SetCursorPos()?

时间:2012-12-10 10:55:18

标签: winapi mouse

你可能弄明白我为什么问这个问题。即使不是,也很简单。 我的问题是,是否有可能在自己的应用程序上检测到SetCursorPos()的使用,而无需扫描其他正在运行的应用程序来调用此API。

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

我并没有忘记这样一个事实:你可以通过检查位置如何改变来'知道'鼠标输入是否是原始的;例如,如果位置从100(X)& 100(Y)到500(X)和500(Y),没有移动这两个之间的每个单独的位置,然后肯定地,某些东西改变了鼠标的位置。

如果你们中的任何一个人都知道一种生成“原始鼠标输入”的方法,那么没有任何应用程序能够分辨出函数输出和鼠标输出之间的区别 - 如果存在这样的差异 - 那也就够了。

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

1 个答案:

答案 0 :(得分:1)

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