【发布时间】:2013-06-01 01:21:51
【问题描述】:
我正在编写一个需要检测窗口何时关闭的程序。目前我正在使用 SetWindowsHookEx 注册一个可以监控窗口消息的钩子。
我正在监视 WM_DESTROY 事件以找出窗口何时被破坏。这适用于大多数窗口,Windows Explorer 是一个明显的例外。 Windows 资源管理器在终止时似乎没有收到 WM_DESTROY 事件(但会收到大多数其他有趣的事件)。
Windows 资源管理器没有收到 WM_DESTROY 是否有原因?
更重要的是,除了侦听 WM_DESTROY 之外,我是否可以使用其他方法来检测 Windows 资源管理器何时终止?
谢谢!
我使用的是 Windows 7(不确定此信息的相关性)
【问题讨论】:
-
很难为这个问题创建一个建设性的答案。当然,WM_DESTROY 通常在窗口被销毁时发送。但窗户破坏不一定是正常的。例如,当进程终止时,Windows 销毁窗口时不会发送任何内容。 Explorer 并没有什么不寻常的地方,18 年的 appcompat hack 以保持流行的 shell 扩展运行看到了这一点。以及资源管理器具有的额外特殊选项,“在自己的进程中运行窗口”选项。大量的东西合谋使您的代码无效。
-
这是否意味着我一般不能依赖 WM_DESTROY 消息?我真的必须求助于定期轮询 EnumWindows 并检查哪些窗口不再存在吗?
标签: winapi hook windows-explorer setwindowshookex