【问题标题】:How to detect if a user pressed Ctrl-Alt-Del or Alt-Tab so that I may minimize my program?如何检测用户是否按下了 Ctrl-Alt-Del 或 Alt-Tab 以便我可以最小化我的程序?
【发布时间】:2014-04-25 21:51:28
【问题描述】:

我正在使用 DirectX 11 用 C++ 编写一个程序,我想拥有它,以便我的程序在用户按下 Ctrl-Alt-Del 或 Alt-Tab 时最小化。

让窗口本身最小化是很容易的部分,因为我所要做的就是调用这个函数:

ShowWindow(hWnd, SW_MINIMIZE);

我坚持的部分是让它检测输入这两个特定击键中的任何一个的时间,以便在其中一个事件发生时调用该函数。

我们将不胜感激,如果您需要我澄清某些事情,请告诉我。

【问题讨论】:

  • 你为什么要最小化? Windows 本身不会在窗口顶部显示它需要的内容吗?
  • 最小化并不是我问题的重点。我想知道如何正确处理 Ctrl-Alt-Del 和 Alt-Tab 的原因是我的程序在用户输入时会表现得很好,并且这种处理所述事件的知识在将来会很有用。
  • 这就是我的问题的重点 - Windows 应该做正确的事情,这样你的程序就不必“表现得很好”,它是自动的,你不能或不应该做任何事情来影响这个过程.我想知道你是否有一些特定的情况。
  • 好的,这是我需要解决的一种情况。当我的程序处于全屏状态并且我点击 alt-tab 时,它会进入窗口模式。我宁愿让它最小化。
  • 您最好的选择是检测结果状态,而不是您认为会到达那里的击键。我怀疑当您的窗口不再是活动窗口时,您真正想要的是一条消息 - 在这种情况下,使用 WA_INACTIVE 消息参数查找 WM_ACTIVATE。这应该同时触发 ALT+TAB 和 CTRL+ALT+DELETE,以及任何其他意外中断,例如来电或紧急更新。

标签: c++ winapi directx-11 winmain alt-tab


【解决方案1】:

更精通 Windows 内核的人可以在这里用沉重的靴子跺脚并纠正我,但据我所知,Ctrl-Alt-Delete 是如此系统,它是“超级系统”。原因是如果程序可以锁定它,那么当某个白痴认为弹出“你确定吗?”是个好主意时,你最终会得到一个死机。当用户意识到他的计算机已经下地狱时的消息框。

作为软件开发人员,我们应该遵循一些指导方针,并且试图改变操作系统的行为(无论我们的意图多么好),总是会以泪水告终。

我建议您不要尝试这样做(如果确实可能,我从未尝试过 - 坦率地说),并开始考虑您可以做的更重要的事情。如果在您运行 DirectX 应用程序时内存可用并且用户确实按了 Ctrl-Alt-Delete,那么您将丢失表面/设备上下文(假设您处于全屏状态)。

优雅地退出,或者如果你可以恢复 - 这样做。

【讨论】:

  • Control-Alt-Del 确实很特别,特别到连VMware都不能直接发送,也捕捉不到,虽然它可以挂个通知,告诉倒霉的人用户改为使用 Control-Alt-Ins。
  • 我认为可以在 kayboard 驱动级别捕获 CTRL+ALT+DEL
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 2016-09-25
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多