如何在操作系统检测到它之前或之后检测到 Ctrl-Alt-Del?

Posted

技术标签:

【中文标题】如何在操作系统检测到它之前或之后检测到 Ctrl-Alt-Del?【英文标题】:How can I detect Ctrl-Alt-Del either before or after the OS detects it? 【发布时间】:2010-01-19 03:48:27 【问题描述】:

当用户按下Ctrl-Alt-Del时,我需要初始化一个变量。由于此组合键的处理方式与其他组合键不同,按下后立即出现 Windows 安全对话框,我的程序无法检测是否按下。

我尝试将下面的代码添加到 KeyDown 事件中,但它不起作用。

     if ( (Keyboard.Modifiers == (ModifierKeys.Control | ModifierKeys.Alt)) && Keyboard.IsKeyDown(Key.Delete))
     
         // Initialize a variable
     

如果可能,如何在操作系统检测到此组合键之前检测到它?如果没有,操作系统后如何检测?

【问题讨论】:

您可以尝试在有人单击 ctrl + alt 后立即设置操作。我使用了这个解决方法 【参考方案1】:

简而言之,you can't.

【讨论】:

这谈到了在操作系统处理快捷方式之前处理它 - 事后检测它发生了什么? 也许您可以通过观察与交互式桌面相关的各种系统事件来做出一些假设(我想有某种系统事件表明登录的桌面被“锁定”)但就获取关于该特定键序列的通知,不,它是故意对用户模式应用程序不可用的。 我刚刚检查了在 Windows 7 中按 CTL+ALT+DEL 时是否引发了 SystemEvents.SessionSwitch 事件,但未引发该事件。您可能会在 WTSRegisterSessionNotification API 中找到一些内容,但我不确定。 这个答案显然是不正确的,因为 VmWare 正是这样做的。当您按 CTRL-ALT-DEL 时,它无法阻止该信息被传递给主机,但它确实 也可以在来宾中获取它。 VmWare 建议优先使用 CTRL-ALT-INS,但它仍然可以获得 DEL 版本。 我的理解是应用程序永远不会看到这种组合,但我不愿意在它上面赌上我的房子。我不会假装理解 VMware 与主机的集成深度,但它与操作系统的挂钩肯定比典型应用程序更紧密,尤其是在 Bios 中启用了 VT。我想你可以尝试一个低级键盘钩子(WH_KEYBOARD_LL),但我敢肯定你不能在 Windows 之前拦截它。【参考方案2】:

即使可以,您也不应该,因为更改 Ctrl-Alt-Del 的含义会使用户感到困惑。

希望不更换键盘驱动程序等是不可能的,否则应用程序可能会使用户无法访问任务管理器来终止应用程序。

【讨论】:

Ian,我不打算改变 Ctrl-Alt-Del 的意思。我想要的只是在按下它之前或之后初始化一个我拥有的变量。

以上是关于如何在操作系统检测到它之前或之后检测到 Ctrl-Alt-Del?的主要内容,如果未能解决你的问题,请参考以下文章

应用程序如何检测到它将被卸载? [复制]

刻录如何检测到它需要自行卸载?

考虑到它的参数,如何检测bash脚本是不是已经在运行[重复]

Obj-C,SandboxModeFlag 听起来不错,但我如何在代码中检测到它?

如何在VBA中设置背景颜色,以便在公式中检测到它?

如何检测非侵入式电话