停止应用程序窃取输入

时间:2012-12-21 12:59:19

标签: windows winapi input hook

我有一个第三方应用程序(为简洁起见,我称之为GreedyApp),它在窗口获得焦点时保持鼠标和键盘输入的人质,即隐藏标准鼠标光标并用它自己的光标替换它,并限制它光标到它的窗口。获取其他窗口输入的唯一方法是远离GreedyApp ALT + TAB。

我需要允许用户免费使用系统的所有组件(交付的系统将是纯粹的触摸屏),因此,一旦GreedyApp获得焦点,系统的其余部分就会变得无法使用。

到目前为止,我已经为GreedyApp劫持了user32.dll,挂钩了SetCursorShowCursorClipCursor,并禁用了它们。结果是GreedyApp不再隐藏光标,并且光标可以在用户移动光标的任何地方自由漫游,但是......

我留下的问题是,无论在屏幕上按下光标的位置,或按下键盘上的键(ALT + TAB除外),输入仍然会被导入GreedyApp和其他窗口没有收到任何意见。

我不确定GreedyApp是如何实现这一点的,因此我还不知道要挂钩哪个API来阻止它。我虽然可能一直在使用钩子,但我已经挂钩并禁用SetWindowsHookEx,但问题仍然存在。

所以我的问题是:

或者:

A)是否有(相对直接的)方法来找出应用程序在运行时进行的API调用?

B)GreedyApp可能使用什么方法阻止其他窗口接收输入?

1 个答案:

答案 0 :(得分:0)

应用程序使用RegisterRawInputDevices获取原始鼠标和键盘输入,并使用标记RIDEV_CAPTUREMOUSE阻止其他应用程序获得焦点。

在将参数传递给要处理的Windows API之前,我已经挂了API调用并删除了标志。用户现在可以控制系统:)