别划走OBS预览:OBS Studio窗口置顶功能的完整上手指南
【免费下载链接】obs-studioOBS Studio - Free and open source software for live streaming and screen recording项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio
直播开着,预览窗口却被浏览器、游戏一个接一个盖住——每次找画面都得按一圈 Alt+Tab。OBS Studio 的窗口置顶(Always On Top)功能就是为这个场景准备的:勾一下菜单,预览就永远浮在所有窗口上面。
30秒开启OBS窗口置顶:菜单三步 + 一条命令行
打开 OBS 主窗口,走这条路:View(视图)→ Always On Top(置顶),打勾。窗口立刻跳到最上层,之后不管你怎么切浏览器、开游戏,它都在。
如果你习惯命令行,或者想每次启动都自动置顶,有个隐藏开关:
obs --always-on-top这个参数在 frontend/obs-main.cpp 里解析,效果和手动打勾完全一样,但只对当次启动生效。
OBS置顶背后的机制:三个平台各走各的原生API
OBS 的做法很典型:上层统一入口,底层分平台实现。frontend/utility/platform.hpp 里声明了SetAlwaysOnTop和IsAlwaysOnTop两个函数,菜单点一下,最终调到下面这套跨平台实现:
| 平台 | 关键手段 | 效果 |
|---|---|---|
| Windows | 调SetWindowPos设置HWND_TOPMOST/HWND_NOTOPMOST | 只改置顶状态,不挪位置、不碰大小 |
| macOS | 把 NSWindow 级别设为NSScreenSaverWindowLevel | 窗口提到屏幕保护程序同级,压在普通应用窗口之上 |
| Linux (X11) | 开关 Qt 的WindowStaysOnTopHint标志 | Qt 翻译成 X11 的_NET_WM_STATE_ABOVE窗口属性 |
| Linux (Wayland) | 不支持 | 菜单项直接灰掉隐藏,日志提示 "not available" |
核心文件一共 5 个,想读源码按这个顺序:
- frontend/utility/platform-windows.cpp — Windows 实现
- frontend/utility/platform-osx.mm — macOS 实现
- frontend/utility/platform-x11.cpp — X11 实现
- frontend/widgets/OBSBasic_MainControls.cpp — 菜单点击后翻转状态的入口
- frontend/widgets/OBSProjector.cpp — 全屏/多视图投影窗口
有个小细节值得说:在 macOS 和 Linux 上,切换置顶需要重建窗口对象,所以 OBS 会先把所有对话框安全关掉,再排队执行切换(ToggleAlwaysOnTop用了Qt::QueuedConnection)。你要是开着属性面板突然切置顶,发现面板没了,就是这个原因,不是 bug。
OBS置顶进阶玩法:投影窗口默认值、配置文件与组合技巧
主窗口只占一半故事。从 源/场景 右键拉出来的全屏投影、多视图窗口,有自己独立的置顶开关:
- 进Settings → General,勾上 "Make projectors always on top"(对应
ProjectorAlwaysOnTop复选框) - 之后所有投影窗口生成时就自带置顶,不用每次手动切
所有状态都落在配置文件basic.ini的[BasicWindow]段:AlwaysOnTop记主窗口菜单勾选,ProjectorAlwaysOnTop记投影默认值。手改 ini 也能直接改默认行为。另外--always-on-top和菜单勾选是"或"的关系——命令行传了,即使配置里没勾也会生效(代码在 frontend/widgets/OBSBasic.cpp 的启动逻辑里)。
二次开发者注意:SetAlwaysOnTop/IsAlwaysOnTop是现成的平台抽象,给任何新窗口(比如自定义预览面板)加置顶,调这一对函数就行,不用碰各平台的窗口 API。
常见坑与FAQ:Wayland失效、macOS关对话框
Wayland 下菜单项消失。现象是 View 里根本没有 Always On Top;原因在 Wayland 协议层面禁止普通应用强制置顶;解决:换 X11 会话,或接受它没有——OBS 启动时会主动隐藏菜单项并在日志里写明原因,别找 bug。
macOS 切置顶后其他窗口"消失"了。这是窗口重建的预期行为(见上一节),先把对话框收干净再切,就不会有残留。
Windows 上置顶被全屏游戏盖住了。置顶只保证窗口 Z 序最高,真正的全屏独占应用层级更高。想全程盯着画面,用窗格模式(Borderless)游戏 + OBS 置顶,或用投影窗口单独盯。
勾了下次启动又没了?不会——菜单状态每次切换都会写回basic.ini。如果没保留,检查一下当前用户配置文件是不是被命令行参数指到了别的路径。
一句话带走重点:用户记住"View → Always On Top" 和--always-on-top就够了;写插件、加窗口的人,记住platform.hpp里那对函数,就能让任何窗口都漂在最上面。
【免费下载链接】obs-studioOBS Studio - Free and open source software for live streaming and screen recording项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考