在窗口关闭(或其拥有线程消失)时收到通知

Get notified when a Window closes (or it's owning thread disappears)

本文关键字:消失 通知 线程 拥有 窗口      更新时间:2023-10-16

我有一个hwnd,我的进程不拥有它,我希望在它消失时得到通知,以便我的代码可以执行清理操作。最好的方法是什么?

如果要检测HWND所属的进程是否消失,可以通过GetWindowThreadProcessId()获取HWND的进程ID,然后通过OpenProcess()获取进程的HANDLE,然后使用WaitForSingleObject()或其他相关的等待函数。进程句柄在进程退出时发出信号。

要检测HWND何时消失,从GetWindowThreadProcessId()获取HWND的线程ID,然后使用SetWindowsHookEx()钩住该线程的消息队列,这样您就可以拦截属于该线程的所有HWND的WM_DESTROYWM_NCDESTROY消息,寻找您感兴趣的特定HWND。请注意,当钩子连接另一个进程时,钩子必须在DLL中实现,所以当HWND被销毁时,你必须使用你选择的进程间通信机制来通知你的主应用程序。