表单应用程序不接收鼠标或键盘事件

我有一个运行在客户端信息亭机器(Windows XP)上的C#.NET 2.0应用程序,偶尔会为用户input提供一个窗口。 其他信息亭软件似乎是以某种方式干扰它,因为它正在运行我们的窗口将不会收到鼠标或键盘事件,尽pipe它是顶部的窗口。 当其他软件没有运行时,按预期工作。 有没有人对这里可能发生的事情有所了解?

谢谢

看看这里

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

使用全局键盘钩应该做的很好,也包括一些来源。 此外,一些用户似乎通过使用ManagedSpyLib来解决类似的问题:

https://stackoverflow.com/a/8829286/1284902

如果有疑问 – 使用Visual Studio提供的Spy ++来查看你的窗口从系统接收到什么消息。

如果其他应用程序阻止所有输入,则不符合Win32 API。 这就是为什么在Vista和更新的Win OS中引入了低级挂钩超时。 如果在调用CallNextHookEx()之前挂起一个钩子并且不再接收到任何低级钩子消息,则意味着一个进程将被踢出低级钩子链。

在Windows XP上,没有这样的限制。 一个进程可以花费尽可能多的时间来处理挂钩消息。 另一个程序要么是越野车,要么是邪恶的。 如果您的应用程序需要输入内容,那么只需以编程方式关闭另一个应用程序,或者联系作者并说明情况。

经过一些挖掘,其他Windows窗体程序可能会使用类似于此处的低级键盘钩子http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx 。 在阅读那篇文章中的链接之后,我看到了该代码片段的摘要

有关这方面的具体示例,请考虑图4中的(buggy)代码。使用低级别键盘窗口钩子,代码拦截发送到任何窗口的所有WM_KEYDOWN消息,并打印出相应的密钥。

资料来源: http : //msdn.microsoft.com/en-us/magazine/cc163606.aspx