2009-08-18 84 views
1

是否有处理按Ctrl + Alt键+德尔重点任何组合方式。举例来说,在测验应用程序(Win Forms)中,用户应该无法切换到其他窗口,直到测试结束。键盘上的C#赢如何捕获招窗体应用程序(CTRL + ALT + DEL)

我能够单独捕获按CtrlAlt键击键,使用C#标准属性。但是一旦他们用户点击了Del键。该控件不适用于我的应用程序,并且窗口处理它。

任何想法都会有所帮助。

谢谢。

+0

更好的解决方案是有一个测试在图书馆监考,像等 – 2009-08-18 12:22:23

+1

这只是众多组合键之一... CTRL + SHIFT + ESC拉起任务管理器,他们可以从那里开始一个新的程序。 – Hugoware 2009-08-26 15:00:09

+1

应用程序托管在自助服务终端电脑上还是安装在家用电脑上? – 2009-08-26 15:08:33

回答

2

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

您正在为用户开发应用程序,不应该试图阻碍他的一般行为。

对于Alt + Ctrl + Del键组合阅读​​3210文章。

+1

如果是这样的话,所有参加考试的在线学生都可以从google获得答案(通过更改为浏览器)。 – vijaysylvester 2009-08-18 09:09:54

+0

他们可以使用另一台机器或使用一本书也获得答案。 – rahul 2009-08-18 09:34:26

+1

可以处理访问另一台机器或书籍。不阻止Ctrl-Alt-Del并允许它们运行浏览器实例使其变得过于简单。 – Jim 2009-08-18 09:47:08

2

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

+0

不,系统级钩子不能捕获它 – 2013-10-01 09:40:12

5

根据其他答案,似乎这是可以做到的。虽然我非常不喜欢这个。举例来说,你的程序应该由于某种原因挂起(上帝保佑...)。那么你就会遇到这样的情况,用户可以做的唯一事情就是用电源按钮关闭计算机(或拔下插头......)。

这是一个很好的理由,这是很难做到的,而方法是不良记录...

这看起来像是要走的路,唯一的办法就是从皮埃尔 - 阿兰·Vigeant评论如果这是一个电脑亭或其他东西。那么这样做真的很有意义!

+0

但我拿起了一个在线测试。它包含引用的功能 – vijaysylvester 2009-08-26 15:01:09

+0

请参阅RRUZ的答案,第二个链接是惊人的 – Andomar 2009-08-28 12:42:09

+0

@Andomar - 是的,我查看了该链接。并且溶剂是以下两种中的一种: 1.禁用注册表中的任务管理器(不捕获keybord事件),导致消息显示为已禁用。 2.编写属于自己的MyGina.dll,覆盖Ctr + Alt + Del的默认功能 这两种方法都是通过对系统进行永久更改来“破解”系统。我认为这些都不属于仅仅在测验应用程序运行期间禁用键序列的范围。 – awe 2009-08-31 06:18:02

-1

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

(你瞧,你的应用程序崩溃对穷人的用户。)

+1

这对Control + Alt + Del问题没有帮助。 – BlueSilver 2010-05-11 10:57:50

+0

+1,但它会解决用户的问题 – 2013-10-01 09:36:38

0

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

短版:

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

龙版本:

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

我该怎么做才能防止将系统按键冲入SMQ?提供一个签名的驱动程序来过滤这些。自己创建和签署驱动程序并不是您可以做的最简单的事情。但是我们可以使用API​​。 例如:Interception来自oblita。该api提供签名的驱动程序与键盘或低级驱动程序进行交互。

参考的重要事件窗口下:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646267(v=vs.85).aspx

相关问题