如果我的窗口具有“始终在最上面”的扩展样式集,那么我认为它是所有没有“始终在最前面”样式集的窗口的顶部,以及那些具有“总在最前面”样式集的窗口但在我的窗口被激活之前被激活。
为了testing这个function,我打开任务pipe理器窗口 – 将其设置为始终在上面,然后打开我的窗口( myWindow
)。
在Windows 7中,我观察预期的行为 – myWindow
在任务pipe理器之上。
但是,在Windows 10中,情况并非如此。 任务pipe理器“始终在其他窗口的顶部”,即使这些窗口本身具有“始终在最前面”样式集。
Windows 10中的任务pipe理器有什么特别之处吗? 如果是的话,是否有一些工作将我的窗口放在任务pipe理器的顶部? 我试图简单地使用BringWindowToTop
函数,但不起作用。 setWindowPos
和HWND_TOP
都不会作为hWndInsertAfter
参数的值。
在Windows 8中对任务管理器做了很多更改。在这些更改中使用特殊情况代码来确保始终位于所有其他始终在顶部的窗口之上并不奇怪。 由于任务管理器是操作系统的一个内置部分,所以微软不会违背任何合同保证。 它可以随意使用OS组件进行操作。
为了回答你的实际问题,没有记录的API。 WS_EX_TOPMOST
是你得到的最好的。 这是为了帮助用户,而不是在视网膜中刻蚀应用程序的窗口。
当两个不同的窗口具有此样式集时,行为取决于实现。 你唯一的保证就是WS_EX_TOPMOST
风格的窗口总是在没有这个风格的其他窗口的Z顺序之上。 系统可以自由地解决冲突,包括将最近最活跃的最上面的窗口放在最前面,通过强制将属于系统组件的窗口强制关闭,甚至惩罚具有多个窗口的进程这种风格通过强制他们的窗口到最顶层的堆栈的底部。
相关阅读:
从我刚才做的一个小小的研究来看:
CreateWindowInBand
。 ERROR_ACCESS_DENIED
。 也许只有经过签名的Microsoft进程才能使用它。