如何在ac#win表单应用程序中捕获键盘敲击(CTRl + alt + Del)
有没有办法处理Ctrl + Alt + Del Key组合。 例如,在测验应用程序(Win Forms)中,用户不应该在测试结束之前切换到其他窗口。
我可以使用c#标准属性单独捕获Ctrl和Alt键。 但是一旦用户点击了Del键。 控件不在我的应用程序中,窗口处理它。
任何想法都会有所帮助。
谢谢。
基于其他答案,似乎可以这样做。 虽然我强烈反对这一点。 举个例子,你的程序应该由于某种原因挂起(上帝保佑……)。 那么你会遇到这样的情况:用户唯一能做的就是用电源按钮关闭计算机(或拉动插头……)。
这是一个很好的理由,这很难做到,而且这些方法的记录很少……
如果这是一个自助服务终端计算机或其他什么,这是Pierre-Alain Vigeant的评论。 那么这样做真的很有意义!
我不认为这是一个好方法。
您正在为用户开发应用程序,不应该试图阻止他的一般操作。
对于Alt + Ctrl + Del组合键,请阅读本文。
AFAIK,Ctrl + Alt + Del生成硬件中断,无法通过软件应用程序处理。 可能这可以通过系统级键盘钩子来处理,但我也不太确定。
看看这里:
http://www.thescarms.com/vbasic/StopReBoot.aspx
基本上对于Win9x,我们欺骗系统认为屏幕保护程序正在运行(禁用Ctrl-Alt-Delete序列),而对于WinNT我们重新映射键盘。
嗯,老话题没有真正的答案。
精简版:
- 您需要使用驱动程序来捕获系统键击
- 为此,请使用拦截 Api,它为此目的提供已签名的驱动程序。
- 为了能够使用拦截,您需要下载并安装WDK(Windows Driver Kid)
- 要测试您的程序,请使用带有测试系统的虚拟机。 您不希望在正在运行的生产系统中测试驱动程序。
长版:
对的,这是可能的。 为了能够拦截这些组合键,您需要在内核层中提供键盘驱动程序。 解释原因:一般来说,Windows中有两种不同类型的击键。 有系统击键(WM_SYSKEYDOWN或WM_SYSKEYUP)和非系统击键(WM_KEYDOWN或WM_KEYUP)。 只有非系统击键可以被钩子中断。 这些击键消息在驱动程序中生成,然后传递到system-message-queue。 如果WM_SYSKEYDOWN或WM_SYSKEYUP在此队列中,则在Windows可以自行处理之前无法删除它。
我该怎么做才能防止将System Key Strokes推入SMQ? 提供已签名的驱动程序来过滤这些。 自己创建和签署驱动程序并不是最简单的事情。 但是我们可以使用API。 例如:从oblita 拦截 。 该api提供签名的驱动程序与键盘或较低的驱动程序进行交互。
Windows下的关键事件参考: https : //msdn.microsoft.com/en-us/library/windows/desktop/ms646267(v = vs。85).aspx
将Form.TopMost设置为true,每隔毫秒调用Form.Activate()并提高进程和入口线程优先级。
(请注意您的应用程序崩溃的可怜用户。)