有什么方法可以处理Ctrl+ Alt+Del组合键。以测验应用程序(Win Forms)为例,在测试结束之前,用户不应该能够切换到其他窗口。
我可以使用 c# 标准属性单独捕获Ctrl和Alt击键。但是一旦他们的用户按下了Del键。控件脱离了我的应用程序,Windows 处理它。
任何想法都会有所帮助。
谢谢。
有什么方法可以处理Ctrl+ Alt+Del组合键。以测验应用程序(Win Forms)为例,在测试结束之前,用户不应该能够切换到其他窗口。
我可以使用 c# 标准属性单独捕获Ctrl和Alt击键。但是一旦他们的用户按下了Del键。控件脱离了我的应用程序,Windows 处理它。
任何想法都会有所帮助。
谢谢。
根据其他答案,这似乎是可能的。虽然我非常不鼓励这样做。例如,您的程序应该由于某种原因挂起(上帝保佑......)。然后你会遇到这样的情况,用户唯一能做的就是用电源按钮关闭计算机(或拔掉插头......)。
很难做到这一点是有充分理由的,而且这些方法的文档记录也很差......
如果这是一台信息亭计算机或其他东西,那么这看起来像是要走的唯一方法是Pierre-Alain Vigeant的评论。那么这样做实际上是有意义的!
AFAIK,Ctrl+Alt+Del 生成硬件中断,无法通过软件应用程序处理。可能这可以通过系统级键盘挂钩来处理,但我也不太确定。
看看这里:
http://www.thescarms.com/vbasic/StopReBoot.aspx
本质上,对于 Win9x,我们欺骗系统认为屏幕保护程序正在运行(禁用 Ctrl-Alt-Delete 序列),而对于 WinNT,我们重新映射键盘。
嗯,没有真正答案的老话题。
精简版:
长版:
对的,这是可能的。为了能够拦截这些组合键,您需要在内核层提供键盘驱动程序。解释原因:通常在 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
将 Form.TopMost 设置为 true,每毫秒调用一次 Form.Activate() 并提高进程和入口线程的优先级。
(瞧,你的应用程序崩溃的可怜的用户。)