3
我有一個Win32應用程序,它在啓動時添加了一個任務欄圖標。如何在explorer.exe重新啓動時恢復「缺失」通知圖標?
它工作正常,除非資源管理器崩潰然後重新啓動,我的應用程序繼續運行,但任務欄圖標消失。
我懷疑我應該處理一些事件,但是哪個?
我有一個Win32應用程序,它在啓動時添加了一個任務欄圖標。如何在explorer.exe重新啓動時恢復「缺失」通知圖標?
它工作正常,除非資源管理器崩潰然後重新啓動,我的應用程序繼續運行,但任務欄圖標消失。
我懷疑我應該處理一些事件,但是哪個?
你所指的實際上被稱爲通知圖標。正確使用這個術語非常重要,以便我們知道您的意思。無論如何,我認爲我的猜測是準確的。
當創建任務欄時,您需要偵聽廣播到所有頂級窗口的窗口消息。這是documented像這樣:
使用Microsoft Internet Explorer 4.0及更高版本,Shell會通知應用程序任務欄已創建。創建任務欄時,它會使用TaskbarCreated字符串註冊一條消息,然後將此消息廣播到所有頂級窗口。當您的任務欄應用程序收到此消息時,應該假定它添加的任何任務欄圖標已被刪除並再次添加它們。此功能通常僅適用於Shell啓動時已經運行的服務。以下示例顯示了處理此案例的非常簡化的方法。
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskbarRestart; switch(uMessage) { case WM_CREATE: s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); break; default: if(uMessage == s_uTaskbarRestart) AddTaskbarIcons(); break; } return DefWindowProc(hWnd, uMessage, wParam, lParam); }