区分 ALT+F4 与任务栏关闭事件

Posted

技术标签:

【中文标题】区分 ALT+F4 与任务栏关闭事件【英文标题】:Distinquishing ALT+F4 vs. Taskbar Close events 【发布时间】:2012-03-29 19:38:37 【问题描述】:

我想确定是通过ALT+F4 还是通过从应用程序的任务栏图标中选择“关闭窗口”触发了 OnClose。到目前为止,我能想到的只是这样的测试:

void ...::OnClose() 

     if (::GetKeyState( VK_MENU ))
     
          // Alt F4 triggered close
     

有没有更好的办法?

加分项:有没有办法专门处理 windows 7 任务栏关闭窗口菜单项?

【问题讨论】:

你可以监听WM_SYSKEYDOWN/VK_F4直接处理事件,而不是让DefWindowProc把它变成标准的关闭事件。 你为什么在乎? ...请记住,可以通过按 ALT+Space+C 来关闭窗口 我关心我自己的原因。 :) 【参考方案1】:

WM_CLOSE 由任务管理器发送。 当您按下 ALT_F4 或从任务栏按钮的系统菜单中发送 WM_SYSCOMMAND 时,参数 SC_CLOSE。

【讨论】:

【参考方案2】:

您应该使用RegisterHotkey API 处理ALT+F4 热键。运行自定义代码,然后关闭窗口。

【讨论】:

不要对局部问题使用全局解决方案。

以上是关于区分 ALT+F4 与任务栏关闭事件的主要内容,如果未能解决你的问题,请参考以下文章

电脑怎么关闭进程?

怎样在电脑结束进程?

如何让delphi任务管理器失效,让程序无法关闭??

转化课总结

电脑下面的任务栏总是卡死

delphi 如何屏蔽win98和winme下的系统热键alt+f4,ctrl+