NotchPrompter隐藏录屏原理详解:NSWindow的sharingType如何让提词器“隐身“
【免费下载链接】NotchPrompter
Super simple-to-use, always-on-top floating text prompter for macOS. Perfect for quick videos or keeping important text visible while you work.
NotchPrompter 是一款免费开源的 macOS 提词器应用,它最"魔法"的能力之一,就是让提词器窗口在录屏和屏幕共享中完全不可见。本文深入剖析其实现原理:只需借助NSWindow的一个属性sharingType,提词器就能在摄像头前优雅"隐身"。
什么是"隐身"功能?
📌 想象一下这样的场景:你正在录制 YouTube 教程、用 OBS 做录屏,或者在 Zoom 会议中共享屏幕。你希望观众只看到干净的界面,而不是满屏的提词稿。
NotchPrompter 把提词器窗口悬浮在 MacBook 刘海(Notch)正下方、摄像头旁边,通过window.level = .statusBar实现永远置顶(见 PrompterWindow.swift)。而"录屏中不可见"这个关键能力,就藏在下面要讲的sharingType里。
核心原理:NSWindow 的 sharingType 属性
macOS 为每个窗口提供了sharingType属性,用于声明该窗口是否允许被屏幕共享或屏幕录制捕获。它一共有三种取值:
| 取值 | 含义 | 录屏中是否可见 |
|---|---|---|
.readOnly | 允许只读方式共享(默认值) | ✅ 可见 |
.readOnlyWithFiltering | 允许共享,但内容可被系统过滤打码 | ⚠️ 可见但可被遮挡 |
.none | 完全不允许共享 | ❌ 不可见 |
也就是说:只要把窗口设为.none,系统级的录屏、屏幕共享在采集画面时就会直接"跳过"这个窗口——无论用什么工具(OBS、macOS 自带录屏、视频会议软件)都一样,因为它们最终都走系统的屏幕捕获通道。
关键代码解析
NotchPrompter 的核心逻辑只有几行,位于 PrompterWindow.swift 的updateScreenRecordingVisibility方法中:
private func updateScreenRecordingVisibility(_ hideFromRecording: Bool) { // https://developer.apple.com/documentation/appkit/nswindow/sharingtype-swift.property if hideFromRecording { window.sharingType = .none } else { window.sharingType = .readOnly } }逻辑非常直白:
- 用户开启"隐藏"开关 →
sharingType = .none→ 提词器从录屏中消失; - 用户关闭开关 →
sharingType = .readOnly→ 提词器正常出现在录屏中。
同时,窗口还通过 Combine 订阅了设置项的实时变化(见 PrompterWindow.swift),切换开关的瞬间立即生效,无需重启应用:
viewModel.$hideFromScreenRecording .receive(on: RunLoop.main) .sink { [weak self] hideFromRecording in self?.updateScreenRecordingVisibility(hideFromRecording) } .store(in: &cancellables)在设置面板中启用该功能
✨ 用户无需看任何代码,在设置界面即可完成配置:
- 打开 NotchPrompter 设置面板;
- 找到Privacy(隐私)分组;
- 勾选"Hide from screen recordings"(从屏幕录制中隐藏)。
对应界面代码见 SettingsView.swift。这个开关默认开启,开箱即用。
设置如何持久化?
你的选择会被自动保存到系统的UserDefaults中,下次启动依然生效:
- 属性声明:PrompterViewModel.swift 中的
hideFromScreenRecording: Bool = true; - 存储键名:
"HideFromScreenRecording",见 PrompterViewModel.swift; - 读取与保存逻辑分别在 loadSettings 与 saveSettings 中完成。
适用场景与注意事项
🎯 这个功能特别适合以下场景:
- 录制 YouTube 视频、技术教程与录屏讲解;
- Zoom、Google Meet 等视频会议中共享屏幕;
- 在线演示(Webinar)时展示干净的界面。
⚠️ 两个小提醒:
- 该属性只影响屏幕录制与屏幕共享,你自己看屏幕时提词器依然正常显示;
- 如果你希望观众也看到提词器(比如教学演示),记得在设置里关掉这个开关。
总结
NotchPrompter 用一行核心代码(window.sharingType = .none)就实现了"提词器录屏隐身"这一高价值功能,是 macOS 提词器工具中体验最简洁的实现方案之一。想要深入了解完整实现,可以阅读 PrompterWindow.swift 与 README.md。
【免费下载链接】NotchPrompter
Super simple-to-use, always-on-top floating text prompter for macOS. Perfect for quick videos or keeping important text visible while you work.
相关推荐
如何让你的U盘在检查面前完美隐身:Phantomdrive 诱饵分区隐身原理全解析
如何让你的U盘在检查面前完美隐身:Phantomdrive 诱饵分区隐身原理全解析 Phantomdrive 是一款开源的加密 U 盘项目:它看起来就是一块普通
浏览器资源嗅探终极指南:猫抓Cat-Catch深度解析与实战应用
浏览器资源嗅探终极指南:猫抓Cat Catch深度解析与实战应用 还在为无法下载在线视频而烦恼吗?你是否遇到过想保存教学视频却找不到下载按钮的困扰?猫抓Cat
音视频前端猫抓 cat-catch 使用指南:网页视频怎么完整存进硬盘,分片、重名、请求被拒一次说清
猫抓 cat catch 使用指南:网页视频怎么完整存进硬盘,分片、重名、请求被拒一次说清 点完"下载",硬盘里却躺着几百个打不开的小分片?那是视频被切碎了边播
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考