2013-06-01 187 views
2

我正在編寫一個程序,需要檢測何時關閉窗口。目前我使用SetWindowsHookEx來註冊一個可以監視窗口消息的鉤子。Windows資源管理器不會收到WM_DESTROY。如何檢測用戶何時關閉資源管理器窗口?

我正在監視WM_DESTROY事件以查明Windows何時被銷燬。這對於Windows資源管理器是一個顯着的例外是大多數Windows工作正常。 Windows資源管理器在終止時看起來沒有收到WM_DESTROY事件(但收到大多數其他有趣的事件)。

Windows資源管理器沒有收到WM_DESTROY的原因是什麼?

更重要的是,有沒有一種替代方法可以用來檢測Windows資源管理器終止而不是偵聽WM_DESTROY?

謝謝!

我使用Windows 7(不知道這個信息的相關程度)

+0

很難爲這個問題創建一個有建設性的答案。當然,WM_DESTROY *通常會在窗口被銷燬時發送。但窗戶破壞不一定是正常的。例如,當進程終止時,Windows破壞窗口時,不會發送任何消息。關於資源管理器,沒有什麼正常的,18年的appcompat黑客保持流行的shell擴展運行看到這一點。還有Explorer提供的額外特殊選項,即「在自己的進程中運行窗口」選項。大量的東西來密謀讓你的代碼無效。 –

+0

那麼這是否意味着我不能依賴一般的WM_DESTROY消息?我真的不得不採取一些措施,例如定期輪詢EnumWindows並檢查哪些窗口不再存在? – TomPeters

回答

2

使用WH_CBT掛鉤,而不是消息掛鉤,並將其處理HCBT_DESTROYWND通知。

+0

我剛試過這個,但沒有奏效。與WM_DESTROY一樣,我從其他窗口收到HCBT_DESTROYWND通知,但沒有收到來自Windows資源管理器的通知。 – TomPeters

+0

然後窗口不被破壞。它可能只是隱藏起來,以供以後由相同的explorer.exe進程重新使用。打開一個新的Windows資源管理器窗口並不總是啓動一個新的explorer.exe進程。 –