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

14
如果我的窗口设置了“始终置顶”的扩展样式,我希望它能够在所有没有设置“始终置顶”样式的窗口和那些在我的窗口被激活之前就已经设置了“始终置顶”样式的窗口之上。
为了测试这个功能,我打开任务管理器窗口-将其设置为“始终置顶”,然后我打开我的窗口(myWindow)。
在Windows 7中,我观察到了预期的行为-myWindow出现在任务管理器之上。
然而,在Windows 10中,情况并非如此。任务管理器始终处于其他窗口之上,即使这些窗口本身已经设置了“始终置顶”样式。
他们在Windows 10中是否对任务管理器进行了特殊处理?如果是,那么有没有办法让我的窗口置于任务管理器之上?我尝试过简单地使用BringWindowToTop函数,但那不起作用。使用HWND_TOP作为hWndInsertAfter参数的setWindowPos也不起作用。

2
进行逻辑飞跃:如果两个程序这样做会怎样?(加上实用考试)。如果那个思想实验(和实用考试)没有说服你,这里有另一个看待你正在尝试创建的困境的方法:如何创建一个始终不被其他最顶层窗口覆盖的最顶层窗口? - IInspectable
2
@IInspectable 我已经进行了“逻辑跳跃”并完成了思想实验。Windows 目前允许为窗口设置“始终置顶”样式 - 这意味着当两个窗口都设置了“始终置顶”样式时,会出现一些预期的行为。我发现如果其中一个窗口是“任务管理器”,并且操作系统是 Win 10(也可能是 Win 8/8.1),则不能满足这种预期行为。 - TheBlueNotebook
1
WS_EX_TOPMOST:"该窗口应放置在所有非最高窗口之上,并且即使窗口处于非活动状态,也应保持在它们之上。" - 这是正确的,仍然如此。我不知道您为什么对这些记录以外的期望。 - IInspectable
1
@IInspectable 再次提问,当两个窗口都具有WS_EX_TOPMOST样式时的情况。假设我将我的应用程序窗口设置为WS_EX_TOPMOST,并且另一个应用程序也设置了相同的标志,现在如果这两个窗口恰好重叠在一起,哪个窗口应该在另一个窗口之上? 我的期望是最近被激活的窗口会出现在顶部。 在Windows 7中,我的期望得到了满足 - 但在Windows 10中没有。 因此,我想了解Windows 10中有什么不同。 - TheBlueNotebook
4
如果你正在寻找一个更加突出显示的窗口,那么运行osk.exe。它没有问题地保持在任务管理器窗口的顶部 :) 在早期的时候,它会与任何想成为更重要的窗口进行争夺,把自己推到前景。Win10版本可能使用DWM,这是一种绘制矩形的功能,当你使用Aero snap或使用触摸屏幕并看到你的手指印时也会出现:)其他方面文档不是很充足。 - Hans Passant
显示剩余8条评论
2个回答

23

根据我之前做的一项小研究:

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

2020 年更新:

关于此功能的详细说明已在此处发布:
Windows 10 中的窗口 Z 序列


有什么想法可以帮我确定一个特定的窗口是否确实是“特殊类型”的顶部窗口,假设我已经有了它的窗口句柄。也许,你得出任务管理器是使用CreateWindowInBand创建的结论的方式可能会在这里给我一些提示? - TheBlueNotebook
2
@TheBlueNotebook 请尝试使用 USER32.GetWindowBand - Paul

11
在Windows 8中,任务管理器发生了许多变化。在这些变化中,微软很可能加入了特别的代码确保任务管理器始终处于其他总是置顶窗口之上,这并不会违反任何合同保证,因为任务管理器是操作系统的内置部分。它可以随意处理操作系统组件。 回答实际问题,没有文档记录此API,WS_EX_TOPMOST 是你最好的选择。它旨在帮助用户,并非将应用程序的窗口刻在他们的视网膜中的方式。
当两个不同的窗口都设置了此样式时,其行为取决于实现。您得到的唯一保证是具有WS_EX_TOPMOST风格的窗口始终位于Z顺序中没有此样式的其他窗口之上。否则,系统可以自由解决冲突,包括将最近活动的顶层窗口保持在顶层,通过将属于系统组件的窗口强制置于顶部来打破平局,或者甚至惩罚具有多个使用该样式的窗口的进程,将它们的窗口强制放在“最高”堆栈的底部。
相关阅读:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接