windows 10 的任务管理器是一种特殊的 'Always on Top' window 吗?

Is Task Manager a special kind of 'Always on Top' window for windows 10?

如果我的 window 有 'always on top' 扩展样式集,我希望它位于所有没有 'Always on top' 样式集的 windows 之上以及那些设置了 'Always on top' 样式但在我的 window 被激活之前被激活的 windows。

为了测试此功能,我打开任务管理器 window - 将其设置为始终在最前面,然后打开我的 window (myWindow).

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

然而,在 Windows10 中,情况并非如此。任务管理器是其他 windows 的 'always on top',即使那些 windows 本身设置了 'always on top' 样式。

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

来自我前一段时间做的一个小调查:

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

2020 年更新:

此处发布了有关该功能的详细文章:
Window z-order in Windows 10

在 Windows8 中对任务管理器进行了很多更改。在这些更改中有特殊情况代码以确保它始终位于所有其他代码之上也就不足为奇了-在顶部 windows。微软这样做不会破坏任何合同保证,因为任务管理器是操作系统的内置部分。 OS 个组件可以随心所欲。

要回答您的实际问题,API 没有相关文档。 WS_EX_TOPMOST 是你得到的最好的。它旨在为用户提供帮助,而不是将您的应用 window 刻在他们的视网膜上的一种方式。

当两个不同的 windows 设置了此样式时,行为取决于实现。你得到的唯一保证是 windows 与 WS_EX_TOPMOST 风格总是在其他 windows 没有 的 Z 顺序之上。系统可以自由地解决它认为合适的冲突,包括将最近活跃的最顶层 window 保持在最顶层,通过强制属于系统组件的 windows 到最顶层来打破平局,甚至惩罚通过将它们的 window(s) 强制到“最顶层”堆栈的底部,具有多个 window 的进程。

相关阅读: