如何在ac#win表单应用程序中捕获键盘敲击(CTRl + alt + Del)

有没有办法处理Ctrl + Alt + Del Key组合。 例如,在测验应用程序(Win Forms)中,用户不应该在测试结束之前切换到其他窗口。

我可以使用c#标准属性单独捕获CtrlAlt键。 但是一旦用户点击了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()并提高进程和入口线程优先级。

(请注意您的应用程序崩溃的可怜用户。)