NotchPrompter隐藏录屏原理详解:NSWindow的sharingType如何让提词器“隐身“

发布时间:2026/11/5 1:33:45
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.

项目地址:https://gitcode.com/gh_mirrors/no/NotchPrompter
点击查看免费下载

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)

在设置面板中启用该功能

✨ 用户无需看任何代码,在设置界面即可完成配置:

  1. 打开 NotchPrompter 设置面板;
  2. 找到Privacy(隐私)分组;
  3. 勾选"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.

项目地址:https://gitcode.com/gh_mirrors/no/NotchPrompter
点击查看免费下载

相关推荐

上一篇:自批评智能体(Self-Critique Agents)详解:生成-批判-优化的自我改进循环
下一篇:免费实测 iloader:三步变一步,iPhone 一键侧载 SideStore 完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考