標籤:
在實際應用中遇到類似下列需要:
隱藏windows視窗,在windows工作列中視窗不可見,但應用程式在後台運行。
windows應用程式的視窗預設會在工作列中添加一個可見的視窗項,方便使用者操作和在不同應用程式中切換。
考慮到windows作業系統是基於shell的,尋找shell的介面資料會發現 ITaskbarList interface 。ITaskbarList提供了AddTab和DeleteTab函數,用於向工作列中添加刪除視窗項。
第一種方法就是使用ITaskbarList介面,在程式啟動時將視窗項從工作列中刪除。
代碼如下:
1 1 ITaskbarList* pTaskbarList; 2 2 hr = CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, 3 3 IID_ITaskbarList, (void**)&pTaskbarList ); 4 4 5 5 if(SUCCEEDED(hr)) 6 6 { 7 7 pTaskbarList->HrInit(); 8 8 if(bShow) 9 9 pTaskbarList->AddTab(hWnd);10 10 else11 11 pTaskbarList->DeleteTab(hWnd);12 12 13 13 pTaskbarList->Release();14 14 }
從另一個角度考慮,windows視窗是否有類似的屬性,用於指定視窗樣式,不在工作列中顯示呢?
下面可以看看Extended Window Styles的資料,其中有這樣的擴充屬性:WS_EX_TOOLWINDOW。指定該屬性工作表示視窗將會作為浮動工具列使用,其視窗不會再工作列中顯示,並且有特殊的顯示處理邏輯,這也恰好符合需要。
那麼使用這種方式就需要調用CreateWindowEx函數。
另外,如果你希望視窗完全不可見,可以在建立視窗的時候指定視窗屬性為不可見,這樣就是直接建立一個後台進程用於處理其他事務。但不推薦這麼處理,畢竟視窗完全不可見的話,可以直接CUI編程,沒必要使用GUI。
本文Tocy
著作權,請勿用於商業用途,轉載請註明原文地址。本人著作權所有,並保留一切權利。
隱藏windows工作列中的視窗顯示