如何拦截所有关键事件,包括ctrl + alt + del和ctrl + tab?

baa*_*h05 5 c# c++ windows keyboard

我正在编写一个屏幕保护程序类型的应用程序,需要阻止用户访问系统而不键入密码.我想捕获/抑制用户可能尝试退出应用程序的各种方法,但我做的所有研究似乎都指向"你不能".

C#或C++中的任何东西都会很棒.我曾想过禁用键盘,但后来我还有其他问题.

Sho*_*og9 31

你不能.按Ctrl + Alt + Del键的整点是,只有系统得到处理一下,"造成这样的系统能够很好地处理它.

幸运的是,Windows内置了对受密码保护的屏幕保护程序的支持(可在显示属性中使用"恢复时,密码保护"选项,或通过组策略).只是使用它.

  • 好的,那么"不应该"怎么样.毫无疑问,有足够的方法可以使系统不再响应任何键盘输入,但这是一个坏主意.这就是为什么在Win9x之后的Windows版本中删除了这个功能的原因 - 在此之前,你可以告诉系统你是一个屏幕保护程序并获得你正在寻找的行为......但是它被滥用和误用了,现在它被处理了由系统.另见:http://blogs.msdn.com/oldnewthing/archive/2004/02/16/73780.aspx (16认同)
  • 我也在投票给这个答案.有时"你不能"是正确的答案,即使它在技术上是虚假的.在这种情况下,问题是如何做一些如此可怕的想法(我不会给雇主认为的飞行废话),"你不能"是最负责任和正确的答案.好Shog9. (14认同)
  • "你不能" - 更具体地说,你的"应用软件"不能:相反,按照设计,只有"系统软件"可以做到这一点; 并不是说你不被允许或者不能编写系统软件,但是你的OP似乎很清楚地询问如何在不编写系统软件的情况下做到这一点......而*那个*的答案就是你不能:因为系统旨在阻止应用程序挂钩这些组合键. (5认同)
  • 从来没有一个不能...对不起伴侣.只有一个我不知道怎么样.它不是一个真正的屏幕保护程序,它必须像屏幕保护程序一样工作,但它是一个独立的应用程序.在我的头顶,重新映射键盘,或禁用它将完成效果.但它比我想要的强一点..程序员应该摆脱不能的术语. (2认同)

Chr*_*isW 15

要添加Shog9所说的内容,如果您的应用程序可以拦截ctrl + alt + del,那么您的应用程序将能够伪装成Windows登录对话框,并通过这样做欺骗最终用户在您的应用程序中键入其凭据.

如果你想要替换Windows登录对话框,请参阅Winlogon和GINA(但是这表示"在Windows Vista中忽略了GINA DLL",我还没有听说过Vista的用途).

如果有人问我不会告诉他们他们不能.

更具体地说,您的"应用软件"不能:相反,在设计上,只有"系统软件"可以做到这一点; 它不是,你不能或不能写系统软件,但你的OP似乎很清楚,询问如何做到这一点,而无需编写系统软件......而答案是,你可以" t:因为系统旨在防止应用程序挂钩这些组合键.

你可以给我指导编写系统的东西..我实际上认为如果它是系统级别会更好..这对OEM来说真的很有意义.此外,如果我写它系统级别,我可以编写一个应用程序来控制它.

例如,键盘过滤器设备驱动程序或GINA DLL将被视为系统软件:由管理员(或OEM)安装并作为操作系统的一部分运行.

我不知道GINA的名字; 我已经(上面)在MSDN中给它一个链接.我希望它是Win32用户模式代码.

设备驱动程序是一个不同的主题:例如驱动程序开发入门.

有没有办法重新映射键盘,以便删除不是它的位置?

我仍然不确定你和/或你的老板是否有正确的想法.恕我直言,你不应该是一个阻止用户按Ctrl-Alt-Del的应用程序.如果您想在不输入密码的情况下阻止用户访问系统,那么您应该锁定(密码保护)系统,就像用户按下Ctrl Alt Del然后选择"锁定此计算机"一样.要解锁计算机,他们需要按Ctrl Alt Del并将其凭据输入WinLogon.

然而,忽略你应该做的事情并专注于你能做的事情,如果你想拦截键盘,显然它可以完成.我自己没有研究过键盘,但这篇文章这篇文章声称成功,通过编写"键盘过滤驱动程序"(这是一种内核模式,而不是Win32,设备驱动程序).如果你写下其中一个虽然你可能会得到一些回击,例如像DDK MVP的这种反应,或者来自反窥探产品的这种反应.

  • ChrisW.所以?我的意思是,如果我想与我的应用程序的人搞砸,窃取他们的Windows密码是一件小事.它让我可以访问我在登录系统中运行时没有的任何内容,并且我可以轻松捕获所有其他击键.更重要的是.你没有回答这个问题.人们可以在这里与他们的答案进行对话.你知道怎么做吗?如果没有,那么为什么要输入任何东西.我不知道如何构建处理器,所以如果有人问我不会告诉他们他们不能.咆哮(现在) (4认同)