繁体   English   中英

窗体应用程序未收到鼠标或键盘事件

[英]Forms application not receiving mouse or keyboard events

我在客户端信息亭计算机(Windows XP)上运行了一个C#.NET 2.0应用程序,该应用程序偶尔会弹出一个供用户输入的窗口。 其他信息亭软件似乎在某种程度上干扰了它,因为尽管它是运行中的窗口,但在运行时,我们的窗口将不会收到Mouse或Keyboard事件。 当其他软件未运行时,所有工作均按预期进行。 是否有人对这里发生的事情有任何见解?

谢谢

如有疑问,请使用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中的(错误的)代码。使用低级键盘窗口挂钩,该代码将拦截发送到任何窗口的所有WM_KEYDOWN消息并打印出相应的键。

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

在这里看看

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

使用全局键盘挂钩应该很好,并且还包括一些资源。 另外,一些用户似乎通过使用ManagedSpyLib解决了类似的问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM