[英]How can I intercept all key events, including ctrl+alt+del and ctrl+tab?
我正在编写一个屏幕保护程序类型的应用程序,它需要阻止用户在不输入密码的情况下访问系统。 我想捕获/抑制用户可能尝试退出应用程序的各种方法,但我所做的所有研究似乎都指向我“你不能”。
C# 或 C++ 中的任何东西都会很棒。 我曾想过禁用键盘,但随后我会遇到其他问题。
你不能。 Ctrl+Alt+Del 的全部意义在于只有系统可以处理它,因为这样系统始终可以处理它。
幸运的是,Windows 内置了对受密码保护的屏幕保护程序的支持(可作为“显示属性”中的“恢复时,密码保护”选项或通过组策略使用)。 就用那个。
补充一下 Shog9 所说的,如果您的应用程序可以拦截 ctrl+alt+del,那么您的应用程序将能够伪装成 Windows 登录对话框,并通过这样做来诱骗最终用户将他们的凭据输入到您的应用程序中。
如果您确实想替换 Windows 登录对话框,请参阅Winlogon 和 GINA (但这表示“在 Windows Vista 中忽略 GINA DLL”,我还没有听说 Vista 是什么)。
如果有人问我不会告诉他们他们不能。
更具体地说,你的“应用软件”不能:相反,按照设计,只有“系统软件”可以做到这一点; 它不是,你不能或不能写系统软件,但你的OP似乎很清楚,询问如何做到这一点,而无需编写系统软件......而答案是,你可以” t:因为系统旨在防止应用程序挂钩这些组合键。
你能给我指导编写系统的东西吗..我实际上认为如果它是系统级别的会更好..这对于OEM来说真的很重要。 此外,如果我在系统级别编写它,我可以编写一个应用程序来控制它。
例如,键盘过滤器设备驱动程序或 GINA DLL 将被视为系统软件:由管理员(或 OEM)安装并作为 O/S 的一部分运行。
除了它的名字,我不知道 GINA; 我已经(上面)在 MSDN 中给出了一个链接。 我希望它是 Win32 用户模式代码。
设备驱动程序是一个不同的主题:例如驱动程序开发入门。
有没有办法重新映射键盘,以便删除不在原来的位置?
我仍然不确定您和/或您的老板是否有正确的想法。 恕我直言,您不应该成为阻止用户按 Ctrl-Alt-Del 的应用程序。 如果您想阻止用户在不输入密码的情况下访问系统,那么您应该锁定(密码保护)系统,就像用户按下了 Ctrl Alt Del 然后选择了“锁定这台计算机”一样。 要解锁计算机,他们需要按 Ctrl Alt Del 并在 WinLogon 中输入他们的凭据。
然而,忽略你应该做的,而是专注于你能做的,如果你想拦截键盘,显然是可以做到的。 我自己没有研究过键盘,但是这篇文章和这篇文章声称成功,通过编写“键盘过滤器驱动程序”(这是一种内核模式,而不是 Win32 设备驱动程序)。 如果您编写其中之一,尽管您可能会受到一些回击,例如来自 DDK MVP 的这种反应,或者来自反窥探产品的这种反应。
我还没有测试过,但是如何使用 SetWindowsHookEx()
来自 MSDN 文档:WH_KEYBOARD_LL
Windows NT/2000/XP:安装一个钩子程序来监视低级键盘输入事件。 有关详细信息,请参阅 LowLevelKeyboardProc 挂钩过程。
由于这似乎是“拦截”三个关键伪中断控制 alt 删除的各种方法的累积的好收集点,这是我昨天遇到的可能有用的东西。
http://cuinl.tripod.com/Tips/enablectrldel.htm
在我看来,当似乎唯一实用和及时的选择是切断电源(即机械移除过载的类 android 掌上电脑的电池)以停止导致相当稳定和完整(或长时间)的任何进程或故障时持久)反应迟钝——似乎危险和令人沮丧的血统仍在继续——并且继续变得更糟。
尤其是移除了诸如机械扬声器音量控制之类的明智而直接的东西。 (当然,笨重,更多物质,但当然这就是事情,对个人或存在有什么好处,无限和完美的意识没有处理它或它的经验?)
它是设计环境的一系列方法,负责响应用户的关键和真正有意义的技术界面部分。 ( 唯一的?)
我说把一些按钮——直接到硬件控制——放回原处——至少在这些技术的软件方面完全适应人工软接口之前,我在对所有启发式的详尽说明中解释了这一点供应。
即使在宇宙的力学中,我敢打赌有一个方便的重置、恢复、暂停、停止类型的功能,以确保存在的安全性和基本可行性存在:智能意识和意志。
拦截crtl+alt+del是可能的,虽然很明显微软很难做到,因为那样你就可以弹出一个假的锁定对话框,并记录人们的密码。
答案是编写设备驱动程序。 我不记得你是否可以只使用一个普通的旧键盘过滤器,或者你是否必须编写一个键盘 ISR。 无论哪种方式,这当然是可能的,但是如果您没有驾驶经验,那会非常痛苦。
Mark Russinovich (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) 的“Process Explorer”就是这样做的,并且在 Sysinternals 被微软收购之前就已经这样做了。
这篇 2002 年更新的文章于 2006 年更新,解释了一种无需编写键盘驱动程序即可完成此操作的方法。 http://www.codeproject.com/KB/system/preventclose.aspx?msg=1666328
如果您只想抑制对任务管理器的调用,则在隐藏窗口中启动 taskmgr.exe 即可完成这项工作
ProcessStartInfo taskmgr = new ProcessStartInfo()
{
FileName = "taskmgr.exe",
WindowStyle = ProcessWindowStyle.Hidden
};
Process.Start(taskmgr);
您可以在 XP 及之前实现这一点,但在 Vista 中则不再如此。
尝试调查您是否可以编写一个应用程序,将自身作为受密码保护的屏幕保护程序启动。
屏保可以做的不仅仅是显示漂亮的图片 - 我之前见过交互式屏保,使用鼠标和键盘来提供一个简单的游戏,虽然我不记得我看到它运行在哪个版本的 Windows 上......它很可能一直是windows 95。(在这种情况下,所有赌注都关闭了)。
在您的程序运行时拦截 ctrl 和 alt 按键,并取消这些按键怎么样?
我不知道这在 Vista 中会有多好,但它值得一试。
我记得在 2001 年左右做过这样的事情,所以它可能在 98 上运行。自从我什至试图搞乱诸如锁定 ctrl-alt-del 之类的事情已经太久了。
好的..我不打算在这里发布代码但是gyst是这个
创建一个键盘钩子。 当用户按下 ctrl || 替代 || delete set bool to true .. 如果他们按下任何其他东西,将它们全部设置为 false。
switch (p_key)
{
default: Clear(); break;
case Keys.LMenu: altHit = true; break;
case Keys.RMenu: altHit = true; break;
case Keys.LControlKey: ctrlHit = true; break;
case Keys.RControlKey: ctrlHit = true; break;
case Keys.Delete: delHit = true; break;
当屏幕有焦点时,将其交给任务管理器,关闭该死的东西。 屏幕闪烁得如此之快,以至于用户从未注意到。 我可以做任何我想做的事。
我承认这是杂七杂八的,但它确实产生了预期的效果。 (哦,我希望我不必这样做)
您仍然可以在 Windows 7 中拦截Ctrl + Alt + Del 。
Process explorer 是这样做的:
http://mygreenpaste.blogspot.com/2005/07/image-file-execution-options-good-evil.html
我正在阅读这个文档页面,一些思考和搜索让我想到了这个问题。
https://docs.microsoft.com/en-us/windows/win32/learnwin32/keyboard-input
我没有测试过,但有这个摘录:
顾名思义,系统击键主要供操作系统使用。 如果您截获 WM_SYSKEYDOWN 消息,请稍后调用 DefWindowProc。 否则,您将阻止操作系统处理该命令。
如果它真的像它说的那样工作,对我来说似乎是一个安全漏洞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.