2012-12-21 62 views
0

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

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

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

我留下的问题是,无论屏幕上的哪个位置光标被按下,或按下键盘上的哪些键(除ALT + TAB),输入仍然是直接进入GreedyApp,和其他Windows没有收到任何输入。

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

所以我的问题是这样的:

或者:

A)是否有一个(相对直接的)的方式来找出API调用的应用程序在运行时在做什么?

B)什么方法是GreedyApp可能被使用以从接收输入停止其他窗口?

+1

的SetFocus()控制,很可能。 –

+1

也可能是SetCapture()。 –

+0

我也考虑过SetCapture(),但那不会捕获用于其他进程的鼠标输入。因此,也许GreedyApp使用[AttachThreadInput](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681956.aspx)代替,以引导输入处理到其自己的消息队列。 – IInspectable

回答

0

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

我已经迷上了API调用和参数传递给Windows API来处理之前删除标志。现在,用户对系统有:)