如果我的窗口有“始终在顶部”扩展样式集,我希望它位于所有没有“始终在顶部”样式集的窗口以及具有“始终在顶部”样式集但在我的窗口被激活之前被激活的窗口的顶部。
为了测试这个特性,我打开了任务管理器窗口--将其设置为总是在最上面,然后打开我的窗口(myWindow
)。
在Windows 7中,我观察到了预期的行为--myWindow
位于任务管理器的顶部。
但是,在Windows 10中,情况并非如此。任务管理器总是在其他窗口的顶部,即使这些窗口本身设置了“总是在顶部”的样式。
他们在Windows 10中的任务管理器中做了什么特别的事情吗?如果是,是否有一些工作,使我的窗口顶部的任务管理器?我试过简单地使用BringWindowToTop
函数,但这不起作用。setWindowPos
也不会将HWND_TOP
作为hWndInsertAfter
参数的值。
2条答案
按热度按时间zzwlnbp81#
从我不久前做的一个小研究来看:
CreateWindowInBand
.ERROR_ACCESS_DENIED
。也许只有签名的Microsoft进程才能使用它。2020更新:
有关该功能的详细文章发布在这里:
Window z-order in Windows 10
j5fpnvbx2#
在Windows 8中对任务管理器进行了大量更改。在这些变化中,有一个特殊情况代码,以确保它总是在所有其他始终在顶部的窗口之上,这一点也不奇怪。微软这样做不会违反任何合同保证,因为任务管理器是操作系统的内置部分。它可以自由地使用操作系统组件。
为了回答您的实际问题,没有相关的API文档。
WS_EX_TOPMOST
是你得到的最好的。这是对用户的一种帮助,而不是在他们的视网膜上 eclipse 刻你的应用程序的窗口。当两个不同的窗口都设置了此样式时,其行为与实现相关。唯一的保证是,具有
WS_EX_TOPMOST
样式的窗口总是在Z顺序中位于其他没有此样式的窗口之上。否则,系统可以自由地解决它认为合适的冲突,包括将最近最活跃的最顶部窗口保持在顶部,通过将属于系统组件的窗口强制到顶部来打破平局,或者甚至通过将它们的窗口强制到“最顶部”堆栈的底部来惩罚具有多于一个具有这种风格的窗口的进程。相关阅读: