1

有什么方法可以处理Ctrl+ Alt+Del组合键。以测验应用程序(Win Forms)为例,在测试结束之前,用户不应该能够切换到其他窗口。

我可以使用 c# 标准属性单独捕获CtrlAlt击键。但是一旦他们的用户按下了Del键。控件脱离了我的应用程序,Windows 处理它。

任何想法都会有所帮助。

谢谢。

4

6 回答 6

5

根据其他答案,这似乎是可能的。虽然我非常不鼓励这样做。例如,您的程序应该由于某种原因挂起(上帝保佑......)。然后你会遇到这样的情况,用户唯一能做的就是用电源按钮关闭计算机(或拔掉插头......)。

很难做到这一点是有充分理由的,而且这些方法的文档记录也很差......

如果这是一台信息亭计算机或其他东西,那么这看起来像是要走的唯一方法是Pierre-Alain Vigeant的评论。那么这样做实际上是有意义的!

于 2009-08-18T12:18:23.797 回答
2

我不认为这是一个好方法。

您正在为用户开发应用程序,不应试图阻止他的一般操作。

对于 Alt+Ctrl+Del 组合键,请阅读本文

于 2009-08-18T06:40:51.340 回答
2

AFAIK,Ctrl+Alt+Del 生成硬件中断,无法通过软件应用程序处理。可能这可以通过系统级键盘挂钩来处理,但我也不太确定。

于 2009-08-18T06:41:11.760 回答
0

看看这里:

http://www.thescarms.com/vbasic/StopReBoot.aspx

本质上,对于 Win9x,我们欺骗系统认为屏幕保护程序正在运行(禁用 Ctrl-Alt-Delete 序列),而对于 WinNT,我们重新映射键盘。

于 2009-08-18T06:54:16.757 回答
0

嗯,没有真正答案的老话题。

精简版:

  • 您需要使用驱动程序来捕获系统击键
  • 为此,请使用为该目的提供签名驱动程序的Interception Api。
  • 为了能够使用Interception,您需要下载并安装 WDK (Windows Driver Kid)
  • 要测试您的程序,请使用带有测试系统的虚拟机。您不想在正在运行的生产系统中测试驱动程序。

长版:

对的,这是可能的。为了能够拦截这些组合键,您需要在内核层提供键盘驱动程序。解释原因:通常在 Windows 中有两种不同类型的击键。有系统击键(WM_SYSKEYDOWN 或 WM_SYSKEYUP)和非系统击键(WM_KEYDOWN 或 WM_KEYUP)。只有非系统击键可以被钩子中断。这些击键消息在驱动程序中生成,然后传递到系统消息队列中。如果 WM_SYSKEYDOWN 或 WM_SYSKEYUP 在此队列中,则在 Windows 可以自行处理之前将其删除是不可能的。

我可以做些什么来防止将系统击键推送到 SMQ?提供一个签名的驱动程序来过滤这些。自己创建和签署驱动程序并不是您能做的最简单的事情。但是我们可以使用一些 API。例如:从oblita拦截。该 api 提供签名的驱动程序来与键盘或较低的驱动程序进行交互。

windows下关键事件参考:https ://msdn.microsoft.com/en-us/library/windows/desktop/ms646267(v=vs.85).aspx

于 2016-11-06T15:52:57.463 回答
-1

将 Form.TopMost 设置为 true,每毫秒调用一次 Form.Activate() 并提高进程和入口线程的优先级。

(瞧,你的应用程序崩溃的可怜的用户。)

于 2009-08-18T12:49:20.823 回答