先说结论: 「总在最前」类工具(PowerToys Always On Top、DevToys、Win+ 系列小工具,或者你自己写的 AHK WinSet, AlwaysOnTop)在独占全屏的游戏面前会失效,因为游戏占据了整个显示器 —— 「置顶」这个标记只是给桌面窗口管理器的一个提示,而独占全屏的游戏已经把这个管理器甩在了一边,于是你钉住的窗口要么被游戏盖住,要么逼着游戏切进较慢的窗口模式。真正靠谱的办法根本不是什么置顶黑科技:让游戏在自己独立的虚拟显示器上以原生全屏运行,再把另一个窗口放进物理显示器上紧挨着它的区域里。窗口真正显示在屏幕上、能点击,游戏保持原生全屏,也没有无边框那笔掉帧代价。
这是 PC 上被念叨得最多的抱怨之一:"我把窗口设成了总在最前,可游戏一进全屏它立马就没了。" 你想让一个计时器、一份攻略、一个聊天窗口或者一个仪表盘显示在全屏游戏之上 —— 可每种「总在最前」的招数都让你失望。这篇就把到底为什么、以及怎样才能真正把窗口留在游戏之上讲清楚。
为什么「总在最前」在全屏游戏上不管用
「总在最前」是一个 Z 轴顺序(z-order) 提示。当你用 PowerToys Always On Top、DevToys 或者一条 AutoHotkey AlwaysOnTop 命令钉住一个窗口时,你做的其实只是请求 Windows 桌面窗口管理器,把这个窗口在堆叠顺序里放到同级窗口之上。在普通窗口之上、甚至在无边框游戏之上,这套都很好用,因为它们都活在同一个合成后的桌面里。
独占全屏的游戏打破了这个前提。它直接接管了整块显示器、绕过了桌面合成器 —— 于是你那个置顶标记所在的堆叠顺序,已经不再决定屏幕上显示什么了。接下来会发生两件事之一:
- 你钉住的窗口被盖住。 游戏在直接绘制整块显示器;合成器那句「把这个放到最上面」的指令没有任何可以对抗的对象,于是窗口干脆就不可见。
- 游戏被踢出独占全屏。 为了能把你的置顶窗口显示出来,Windows 只能把游戏拽回一个合成后的(类似无边框的)模式 —— 而这恰恰是你一开始想躲开的那条较慢的路,它会吃掉你的帧数、还加上输入延迟。
所以「游戏里 always on top 不管用」并不是你工具的 bug。它是一个结构性的错配:置顶标记是发给合成器的一个请求,而独占全屏的游戏故意绕开了这个合成器。没有任何置顶黑科技能在不把游戏拽出来的前提下,把窗口钉在真正的独占全屏之上。
各种办法排排坐
下面是当你真的想让一个窗口显示在全屏游戏之上时,几种常见办法的对比。
| 做法 | 在真·全屏下还看得见? | 游戏保持原生帧率? | 窗口可点击? | 一个屏幕? |
|---|---|---|---|---|
| PowerToys / AHK「总在最前」 | 不 —— 被盖住,或逼游戏退出独占全屏 | 只有把游戏切成窗口才行(那就不算了) | 是 | 是 |
| 无边框窗口 + 置顶 | 不是「真」全屏 —— 游戏已经在窗口模式了 | 不 —— 要付合成器的帧率/延迟代价 | 是 | 是 |
| 第二台显示器 | 不适用 —— 窗口在另一块屏上,不在游戏之上 | 是 | 是 | 不 —— 要额外硬件 |
| Staged(独立虚拟显示器 + 区域) | 是 —— 窗口就在游戏旁边,真正显示在屏幕上 | 是 —— 原生全屏,没有无边框代价 | 是 | 是 |
1. PowerToys Always On Top / AHK(在窗口上有效,独占全屏下失效)
PowerToys Always On Top、DevToys 和一行 AutoHotkey 脚本,都是钉住一个窗口的 Z 轴顺序。在普通 App 和无边框游戏之上,它们表现出色 —— 用你手头现成的免费工具就能立刻搞定。
- 优点: 轻量,在无边框游戏和桌面 App 之上都好使。
- 缺点: 在独占全屏的游戏之上,钉住的窗口要么被盖住,要么只能靠把游戏逼出独占全屏(那个较慢的模式)才现身。它是一个合成器层面的提示,而独占全屏就坐在合成器的管辖范围之外。
2. 无边框窗口 + 置顶(看得见,但要交帧率税)
把游戏切成无边框窗口,然后再把你的另一个窗口钉在上面。现在所有东西都活在合成后的桌面里,于是置顶标记生效,你的窗口也就一直看得见了。
- 优点: 钉住的窗口真的能留在游戏之上;在大多数现代游戏里都好使。
- 缺点: 你为了这个把独占全屏让给了桌面合成器,代价是一点点帧率和输入延迟。而且严格来说,你已经不再是把窗口留在真全屏之上了 —— 你为了让它成立,把游戏改成了窗口模式。竞技玩家一般都嫌这笔延迟税。
3. 让游戏跑在自己独立的虚拟显示器上、把窗口停靠在它旁边(原生全屏,没有黑科技)
与其跟 Z 轴顺序硬碰硬,不如绕开它。让游戏在一块独立的虚拟显示器上以原生全屏运行,再把另一个窗口放进物理显示器上紧挨着它的区域里。Windows 把这块虚拟显示器当成一台真显示器看待,于是游戏保持真正的原生全屏、永远不用离开独占模式 —— 而你的另一个窗口被合成进它旁边的一个区域里,完整显示在屏幕上、可以点击。Staged 做的正是这件事:它让游戏跑在一块虚拟显示器上,再把它合成进你物理屏幕上的一个区域里,其他 App 就摆在它四周的区域中。
- 优点: 原生全屏性能(没有无边框代价);另一个窗口真正显示在游戏旁边、可点击 —— 不是那种会被盖住的置顶黑科技;而且它在一台显示器上就能用,不需要额外硬件,笔记本也照样。
- 诚实的提醒: 窗口是坐在游戏旁边它自己的区域里,而不是字面意义上悬浮在一个全屏游戏之上 —— 而这恰恰就是重点,因为「悬浮在真正的独占全屏之上」本就不是一个置顶标记能诚实做到的事。另外,Staged 是一个独立工具,而不是 Windows 内置的一个开关。
「置顶」钉住 vs. 真正显示在游戏旁边
把你到底想要什么说清楚是值得的,因为对应的办法不一样:
- 如果你只需要窗口显示在无边框游戏或桌面 App 之上,那 PowerToys Always On Top 或一段 AHK 脚本就很完美 —— 钉住就搞定。
- 如果你需要窗口在游戏保持真正的独占全屏时也看得见,那没有任何置顶标记能做到,除非把游戏拽进窗口模式。这种情况请改成给游戏一块自己的虚拟显示器,再把窗口停靠进它旁边的区域里 —— 真正显示在屏幕上,游戏也永远不离开原生全屏。
搞清楚你手里是哪一种情况,能省下你去追一个「独占全屏本来就注定会无视」的置顶黑科技的功夫。
常见问题
为什么「总在最前」在我的全屏游戏上不管用?
因为「总在最前」是发给 Windows 桌面合成器的一个 Z 轴顺序提示,而独占全屏的游戏绕过了这个合成器、直接绘制整块显示器。置顶标记没有任何可以对抗的对象,于是你钉住的窗口要么被盖住,要么只能靠把游戏逼出独占全屏、切进较慢的窗口模式才现身。这是一个结构性的错配,不是你工具的 bug。
PowerToys Always On Top 在游戏里能用吗?
在无边框游戏和桌面 App 之上,能 —— PowerToys Always On Top 能好好地钉住窗口。在独占全屏的游戏之上,不能:游戏在合成器之外占据了显示器,于是钉住的窗口被盖住,或者把游戏踢进窗口模式。DevToys 和你自己写的 AutoHotkey AlwaysOnTop 脚本也是一样。
我该怎么把一个窗口钉在全屏游戏之上?
诚实的答案是:你不该把它钉在真正的独占全屏之上 —— 而是把它放在游戏旁边。让游戏在自己独立的虚拟显示器上以原生全屏运行,再把另一个窗口停靠进同一块显示器上它旁边的区域里。它真正显示在屏幕上、可点击,游戏也永远不用离开独占全屏。这正是 Staged 在一台显示器上做到的事。
无边框窗口能解决吗(代价是什么)?
能,意思是一旦游戏切成无边框窗口,所有东西都活在合成后的桌面里,于是置顶标记就能让你的窗口一直看得见。代价是:你拿独占全屏换来了桌面合成器,多出一点点帧率和输入延迟的开销 —— 而且你已经不再是把窗口留在真全屏之上了,因为你把游戏改成了窗口模式。一块虚拟显示器就能避开这个取舍。
只有一个显示器也能用吗?
能。让游戏跑在虚拟显示器上、把窗口停靠进它旁边的区域里,这一切全在你已有的那一块屏幕上完成 —— 不用第二台显示器、不用额外硬件,笔记本上也照样能用。游戏在它的区域里保持满尺寸,另一个窗口就在旁边一直是活的。
这会拉低我的帧率吗?
无边框窗口会让帧率略微下降,因为它把游戏经由桌面合成器、而不是独占全屏来走。硬把一个置顶窗口摁在全屏游戏之上,也可能触发同一条合成器路径。让游戏跑在自己独立的虚拟显示器上,则保持原生全屏性能、没有无边框代价、不掉帧 —— 渲染分辨率也由你自己定。
不靠置顶黑科技,也能让窗口一直看得见
Staged 让你的游戏在一块虚拟显示器上以原生全屏运行,再把另一个窗口停靠进它旁边的一个区域里 —— 真正显示在屏幕上、可点击,没有会被盖住的置顶标记,也没有无边框那笔帧率代价,全在一台显示器上。它即将登陆 Steam;加入愿望单,抢先体验。
延伸阅读:
