任务管理器是Windows 10的一种特殊的“始终在顶部”窗口吗?

nnsrf1az  于 2023-05-19  发布在  Windows
关注(0)|答案(2)|浏览(250)

如果我的窗口有“始终在顶部”扩展样式集,我希望它位于所有没有“始终在顶部”样式集的窗口以及具有“始终在顶部”样式集但在我的窗口被激活之前被激活的窗口的顶部。
为了测试这个特性,我打开了任务管理器窗口--将其设置为总是在最上面,然后打开我的窗口(myWindow)。
在Windows 7中,我观察到了预期的行为--myWindow位于任务管理器的顶部。
但是,在Windows 10中,情况并非如此。任务管理器总是在其他窗口的顶部,即使这些窗口本身设置了“总是在顶部”的样式。
他们在Windows 10中的任务管理器中做了什么特别的事情吗?如果是,是否有一些工作,使我的窗口顶部的任务管理器?我试过简单地使用BringWindowToTop函数,但这不起作用。setWindowPos也不会将HWND_TOP作为hWndInsertAfter参数的值。

zzwlnbp8

zzwlnbp81#

从我不久前做的一个小研究来看:

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

2020更新:

有关该功能的详细文章发布在这里:
Window z-order in Windows 10

j5fpnvbx

j5fpnvbx2#

在Windows 8中对任务管理器进行了大量更改。在这些变化中,有一个特殊情况代码,以确保它总是在所有其他始终在顶部的窗口之上,这一点也不奇怪。微软这样做不会违反任何合同保证,因为任务管理器是操作系统的内置部分。它可以自由地使用操作系统组件。
为了回答您的实际问题,没有相关的API文档。WS_EX_TOPMOST是你得到的最好的。这是对用户的一种帮助,而不是在他们的视网膜上 eclipse 刻你的应用程序的窗口。
当两个不同的窗口都设置了此样式时,其行为与实现相关。唯一的保证是,具有WS_EX_TOPMOST样式的窗口总是在Z顺序中位于其他没有此样式的窗口之上。否则,系统可以自由地解决它认为合适的冲突,包括将最近最活跃的最顶部窗口保持在顶部,通过将属于系统组件的窗口强制到顶部来打破平局,或者甚至通过将它们的窗口强制到“最顶部”堆栈的底部来惩罚具有多于一个具有这种风格的窗口的进程。
相关阅读:

相关问题