0

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

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

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

我留下的问题是,无论在屏幕上的哪个位置按下光标,或者按下键盘上的哪些键(ALT+TAB 除外),输入仍然被定向到 GreedyApp,而其他窗口不会接收任何输入。

我不确定 GreedyApp 是如何实现这一点的,因此我还不知道哪些 API 调用可以钩住它来阻止它。我虽然它可能一直在使用 hooks 本身,但我已经 hooked 和 disabled SetWindowsHookEx,但问题仍然存在。

所以我的问题是:

任何一个:

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

或者

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

4

1 回答 1

0

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

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

于 2013-01-02T09:29:07.137 回答