【问题标题】:Is there a way to know when another hwnd has closed?有没有办法知道另一个 hwnd 何时关闭?
【发布时间】:2014-04-09 11:13:18
【问题描述】:

是否有一种方法可以设置监听器/观察器以了解不相关的应用程序窗口何时关闭?

我可以检查窗口是否仍然打开,但继续这样做似乎很愚蠢。

【问题讨论】:

  • 如果其他应用不是您的,您可能需要一个系统范围的 CBT 挂钩。
  • 是的,你是对的,这不是我的申请。谢谢

标签: winapi hwnd


【解决方案1】:

你可以:

  1. 轮询HWND 有效性(尤其是如果您不需要计时精度)
  2. 子类化窗口以拦截其WM_DESTROY,然后将通知转发到您的应用程序
  3. 安装一个窗口消息钩子以便能够拦截消息,否则
  4. 创建一个隐藏的子窗口,使其与父级销毁一起销毁,同时为您按时调用您的消息处理程序

【讨论】:

  • 我应该说它是一个外部应用程序,我只需要知道它何时关闭,但我无法编辑它。
  • 像任何其他句柄类型一样,HWNDs 被重用。检查HWND 的有效性并不能回答在检索时具有特定HWND 的窗口是否仍然存在的问题。
  • @IInspectable:这是一个很好的观点,实际上轮询不是一个可靠的解决方案。还有检查HWND值有效性的API在这里,简单明了,有时可以接受错误的机会,更喜欢简单。
【解决方案2】:

可访问性 API 的 SetWinEventHook 过滤 EVENT_OBJECT_DESTROY

这是基于通知的,因此没有轮询,并且与 CBT 挂钩不同,它不需要注入。

【讨论】:

  • 谢谢,这是我一直在寻找的简单答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 2010-10-27
相关资源
最近更新 更多