对于Windows 10,任务管理器是一种特殊的“永远在线”窗口吗?

时间:2016-08-31 10:04:21

标签: c++ windows winapi windows-7 windows-10

如果我的窗口具有“永远在线”的扩展样式集,我希望它在所有没有“Always on top”样式集的窗口之上以及那些具有“始终在顶部”的窗口'样式集但在我的窗口激活之前被激活。

要测试此功能,我打开任务管理器窗口 - 将其设置为始终位于顶部,然后打开窗口(myWindow)。

在Windows 7中,我观察到预期的行为 - myWindow位于任务管理器之上。

但是,在Windows 10中,情况并非如此。任务管理器“总是在其他窗口的顶部”,即使这些窗口本身具有“始终在线”样式集。

他们在Windows 10中使用任务管理器有什么特别之处吗?如果是,是否有一些工作可以将我的窗口置于任务管理器之上?我试过简单地使用BringWindowToTop函数,但这不起作用。 setWindowPos HWND_TOP也不是hWndInsertAfter参数的值。

2 个答案:

答案 0 :(得分:7)

Windows 8中的任务管理器进行了大量更改。在这些更改中,特殊情况代码确保它始终位于所有其他始终在顶部的窗口之上,这一点都不奇怪。由于任务管理器是操作系统的内置部分,因此Microsoft不会违反任何合同保证。它可以随意使用OS组件。

要回答您的实际问题,没有针对此的文档API。 OPTIONS是你得到的最好的。它意味着对用户的帮助,而不是在他们的视网膜上蚀刻应用程序窗口的方法。

当两个不同的窗口设置了此样式时,行为与实现有关。您获得的唯一保证是具有WS_EX_TOPMOST样式的窗口始终位于其他窗口之上,而不是此样式的Z顺序。系统可以在其认为合适的情况下自由解决冲突,包括将最近活动的最顶层窗口保持在最顶层,通过强制属于系统组件的窗口到顶部来打破平局,甚至惩罚具有多个窗口的窗口。这种风格通过强制他们的窗口到“最顶层”堆栈的底部。

相关阅读:

答案 1 :(得分:5)

我刚才做过的一项小型研究:

  • 任务管理器确实是一种特殊类型的"永远在上面。
  • 正在使用以下未记录的函数创建“任务管理器”窗口:CreateWindowInBand
  • 尝试从其他进程使用此函数会导致ERROR_ACCESS_DENIED。也许只有签名的Microsoft进程才能使用它。