c++ - win32病毒 - windows api教學




任務管理器是Windows 10的一個特殊的“總是在最前面”窗口? (2)

在Windows 8中對任務管理器做了很多更改。在這些更改中,特殊情況代碼確保它始終位於所有其他始終在頂部的窗口之上,這並不奇怪。 由於任務管理器是操作系統的一個內置部分,所以微軟不會違背任何合同保證。 它可以隨意使用OS組件。

為了回答你的實際問題,沒有記錄的API。 WS_EX_TOPMOST是你得到的最好的。 這是為了幫助用戶,而不是在視網膜中刻蝕應用程序的窗口。

當兩個不同的窗口具有此樣式集時,行為取決於實現。 你唯一的保證就是WS_EX_TOPMOST風格的窗口總是在沒有這個風格的其他窗口的Z順序之上。 系統可以自由地解決衝突,包括將最近最活躍的最上面的窗口保持在最前面,通過強制屬於系統組件的窗口頂到頂部,甚至懲罰具有多個窗口的進程這種風格通過強制他們的窗口到最頂層的堆棧的底部。

相關閱讀:

如果我的窗口具有“始終在最上面”的擴展樣式集,那麼我認為它是所有沒有“始終在最前面”樣式集的窗口的頂部,以及那些具有“始終在最前面”樣式集的窗口但在我的窗口被激活之前被激活。

為了測試這個功能,我打開任務管理器窗口 - 將其設置為始終在上面,然後打開我的窗口( myWindow )。

在Windows 7中,我觀察預期的行為 - myWindow在任務管理器之上。

但是,在Windows 10中,事實並非如此。 任務管理器“始終在其他窗口的頂部”,即使這些窗口本身俱有“始終在最前面”樣式集。

Windows 10中的任務管理器有什麼特別之處嗎? 如果是的話,是否有一些工作將我的窗口放在任務管理器的頂部? 我試圖簡單地使用BringWindowToTop函數,但不起作用。 setWindowPosHWND_TOP都不會作為hWndInsertAfter參數的值。


從我剛才做的一個小小的研究來看:

  • 任務管理器確實是“永遠在線”的“特殊類型”。
  • 任務管理器窗口正在創建與以下未記錄的功能: CreateWindowInBand
  • 嘗試從另一個進程使用此函數將導致ERROR_ACCESS_DENIED 。 也許只有經過簽名的Microsoft進程才能使用它。




windows-10