如果我的窗口具有“永远在线”的扩展样式集,我希望它在所有没有“Always on top”样式集的窗口之上以及那些具有“始终在顶部”的窗口'样式集但在我的窗口激活之前被激活。
要测试此功能,我打开任务管理器窗口 - 将其设置为始终位于顶部,然后打开窗口(myWindow
)。
在Windows 7中,我观察到预期的行为 - myWindow
位于任务管理器之上。
但是,在Windows 10中,情况并非如此。任务管理器“总是在其他窗口的顶部”,即使这些窗口本身具有“始终在线”样式集。
他们在Windows 10中使用任务管理器有什么特别之处吗?如果是,是否有一些工作可以将我的窗口置于任务管理器之上?我试过简单地使用BringWindowToTop
函数,但这不起作用。 setWindowPos
HWND_TOP
也不是hWndInsertAfter
参数的值。
答案 0 :(得分:7)
Windows 8中的任务管理器进行了大量更改。在这些更改中,特殊情况代码确保它始终位于所有其他始终在顶部的窗口之上,这一点都不奇怪。由于任务管理器是操作系统的内置部分,因此Microsoft不会违反任何合同保证。它可以随意使用OS组件。
要回答您的实际问题,没有针对此的文档API。 OPTIONS
是你得到的最好的。它意味着对用户的帮助,而不是在他们的视网膜上蚀刻应用程序窗口的方法。
当两个不同的窗口设置了此样式时,行为与实现有关。您获得的唯一保证是具有WS_EX_TOPMOST
样式的窗口始终位于其他窗口之上,而不是此样式的Z顺序。系统可以在其认为合适的情况下自由解决冲突,包括将最近活动的最顶层窗口保持在最顶层,通过强制属于系统组件的窗口到顶部来打破平局,甚至惩罚具有多个窗口的窗口。这种风格通过强制他们的窗口到“最顶层”堆栈的底部。
相关阅读:
答案 1 :(得分:5)
我刚才做过的一项小型研究:
CreateWindowInBand
。ERROR_ACCESS_DENIED
。也许只有签名的Microsoft进程才能使用它。