news 2026/10/18 0:15:33

Interview Coder CN 窗口隐身实现原理:setContentProtection 与 WebRTC 枚举为何能骗过屏幕分享

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Interview Coder CN 窗口隐身实现原理:setContentProtection 与 WebRTC 枚举为何能骗过屏幕分享

【免费下载链接】interview-coder-cn

AI 截屏解题助手,考试助手,在「面试」或「在线考试」时,借助AI实时提供解题思路和答案。

项目地址:https://gitcode.com/gh_mirrors/in/interview-coder-cn
点击查看免费下载

Interview Coder CN 是一款面向编程面试与在线考试的开源 AI 截屏解题助手,它的招牌能力就是窗口隐身:面试官要求屏幕分享时,助手窗口在你自己屏幕上照常显示,对方却看不到。这篇文章带你拆解隐身背后的两个核心机制——setContentProtection与 WebRTC 窗口枚举,看懂它们为什么能"骗过"屏幕分享软件。

一、先搞清楚:屏幕分享有两条"偷看"路线 🕵️

屏幕分享软件拿到你屏幕内容的方式其实有两条完全不同的路径,隐身设计必须把两条路都堵住:

路线原理典型场景对方能看到什么
整屏采集(像素级)把整个屏幕的像素读走会议里选"共享此屏幕"窗口区域内的画面内容
窗口枚举(列表级)遍历系统窗口列表让用户挑选会议里选"共享此窗口"窗口的标题和存在本身
  • 前者针对窗口的"内容",需要让画面变黑;
  • 后者针对窗口在列表中的"存在",需要让它不出现在列表里。

setContentProtection只能解决前一个问题,解决不了后一个——所以两个机制必须配合:一个管像素,一个管列表。

二、第一道防线:setContentProtection 像素级"打码"

setContentProtection(true)是 Electron 为BrowserWindow提供的 API:开启后窗口在用户屏幕上显示一切正常,但任何屏幕采集(GDI / DXGI / ScreenCaptureKit 等)经过该窗口区域时,拿到的都是一块黑屏。

项目把这个调用统一封装成 applyContentProtection(),并覆盖应用的全部三个窗口:

  • 主窗口:窗口就绪显示时开启(main-window.ts),之后每次重新显示都会再开一次(L85-L87)
  • 悬浮工具条窗口:toolbar-window.ts
  • 截图框选窗口:region-picker.ts

平台底层机制不同,效果一致:macOS 上把窗口共享类型设为NSWindowSharingNone(禁止系统共享),Windows 上走 DWM(桌面窗口管理器)的受保护内容通道。最终结果就是:采集端看到黑块,用户本人看到正常内容。

export function applyContentProtection(window: BrowserWindow, forceReset = false): void { if (!window || window.isDestroyed()) return if (forceReset && process.platform === 'win32') { window.setContentProtection(false) } window.setContentProtection(true) }

💡forceReset参数是 Windows 平台的小坑:该平台上窗口经过移出屏幕等操作后,受保护状态可能失步,必须先"关一次再开一次"(false → true)才能确保生效。

三、Windows 平台的重置姿势:为什么每次显示都要"重设一次"

在 shortcuts.ts 中,每次显示主窗口都会重新应用内容保护,并且 Windows 上固定传入forceReset = true:

window.showInactive() applyContentProtection(window, process.platform === 'win32')

同样地,从"软隐藏"状态恢复窗口时,会先执行 applyContentProtection(window, true) 重置保护,再把窗口移回原位。这个"先重置再设置"的动作,就是为了防止 Windows 平台的受保护状态丢失,导致窗口以正常内容出现在对方的共享画面里。

四、第二道防线:空窗口标题骗过 WebRTC 的窗口枚举

第二道防线针对"共享此窗口"。Edge / Chrome 的"共享窗口"选择器由 Chromium 的 WebRTC 屏幕采集实现,它遍历窗口时带有kIgnoreUntitled标志——标题为空的窗口会被直接从候选列表里丢弃。

Interview Coder CN 正是利用这条规则:让主窗口的原生标题永远为空。创建窗口时设置title: ''(main-window.ts),并拦截页面标题更新事件,即使网页里的document.title变化,原生窗口标题也保持为空:

mainWindow.on('page-title-updated', (event) => { event.preventDefault() mainWindow.setTitle('') })

效果:对方浏览器的共享窗口列表里永远不会出现这个"无名窗口",助手在列表层面被直接过滤掉。截图框选窗口也用了同样的空标题技巧(region-picker.ts)。

这里有个巧妙的"零成本"前提:窗口本身就是无边框的,标题从不绘制,所以保持标题为空没有任何视觉代价。

五、配套细节:让窗口"无处露脸"的其余设置

除了两个核心机制,窗口创建时还配了一组"低调"参数(完整说明见 AGENTS.md 的 Window Stealth 章节与 main-window.ts):

设置作用
frame: false+transparent: true无边框、透明、无阴影,减少"视觉存在感"
skipTaskbar: true不出现在任务栏,对方无从点选
hiddenInMissionControl: truemacOS 调度中心里不露面
macOStype: 'panel'面板窗口可浮于其他应用的全屏 Space 之上
setVisibleOnAllWorkspaces(...)跨虚拟桌面、在他人全屏应用之上保持可见
showInactive()显示窗口但不抢焦点,做题页面不失焦
keepWindowInFront()显示后 8 秒内每 100ms 重申一次置顶,之后转为低频守护(shortcuts.ts)

另外,Windows 上的"隐藏窗口"快捷键用的是"软隐藏":把窗口移到屏幕外 2000 像素、透明度置 0 并开启鼠标穿透(shortcuts.ts),随时可以恢复——这是属于用户自己的"逃生门",与上述两道隐身机制相互独立。

六、隐身不是万能的:正式使用前这样验证 ⚠️

坦白说:隐身功能适配市面上大部分主流会议软件(如腾讯会议等),但很少部分软件和浏览器的屏幕采集实现不同,可能无法正常隐身。官方 README.md 特别提醒:务必在正式使用前,用「当前电脑」+「当前会议软件」自行测试。

验证清单:

  1. 打开助手,让解答窗口出现在做题页面上;
  2. 发起会议并选"共享此屏幕",看对方画面里助手窗口区域——应为黑块或完全不可见;
  3. 改为"共享此窗口",检查窗口列表里是否出现助手窗口——不应该出现;
  4. 会议软件的全屏 / 窗口两种形态都测一遍,个别软件全屏采集行为不同。

本项目仅供学习与研究使用,请遵守考试、面试等场合的相关规定,使用本软件产生的一切后果由使用者自行承担。

七、相关文件索引 🔍

想深入阅读?核心代码集中在 Electron 主进程的窗口管理里:

  • 主窗口创建与内容保护:src/main/main-window.ts
  • 悬浮工具条窗口:src/main/toolbar-window.ts
  • 截图区域框选窗口:src/main/region-picker.ts
  • 显示/隐藏、软隐藏与置顶守护:src/main/shortcuts.ts
  • 架构与开发约定总览:AGENTS.md

【免费下载链接】interview-coder-cn

AI 截屏解题助手,考试助手,在「面试」或「在线考试」时,借助AI实时提供解题思路和答案。

项目地址:https://gitcode.com/gh_mirrors/in/interview-coder-cn
点击查看免费下载

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 0:10:27

VBA真题避坑指南:循环边界、参数传递与ADO操作实战解析

简介:这份资源是面向VBA初学者与Office自动化开发者的编程练习题与近年真题汇编,聚焦循环结构、分支选择、变量作用域、字符串处理、图形输出及DAO/ADO数据访问等核心考点,适合备考计算机二级、巩固语法基础或日常查阅。包内共1个doc文件&…

作者头像 李华
网站建设 2026/10/18 0:08:52

AI在建筑行业的应用现状与PPT汇报拆解指南

简介:这份PPT聚焦国内外人工智能技术在建筑行业的研究与应用现状,面向建筑行业从业者、科研人员及相关专业学生,可作为了解AI建筑整体格局的入门资料与汇报参考。内容依次梳理AI在建筑设计、施工、管理中的作用及应用前景,分别介绍…

作者头像 李华
网站建设 2026/10/18 0:07:55

AI编程工具实测:33款工具五档分类与选型指南

不卖关子,先交代一下背景。上个月我在公司带一个老项目迁移,组里一个刚入职半年的同事,用某款AI工具在十分钟里把一段两百行的遗留存储过程重构完,还顺手补了三个我正准备提的边界条件测试。我看完只有一个感觉:2021年…

作者头像 李华
网站建设 2026/10/18 0:00:20

AstronRPA:企业级RPA与AI Agent融合的自动化底座

1. 项目概述:这不是又一个“RPA套壳AI”的玩具,而是一套能进产线的自动化底座AstronRPA——科大讯飞开源的企业级 RPA AI Agent 自动化平台。这名字里藏着三重信息:Astron(天体/星辰),暗示其架构具备可伸缩…

作者头像 李华
网站建设 2026/10/18 0:00:18

大众点评电商案例PPT背后的数据逻辑与复现方法

简介:本资源是一份面向计算机专业学生与电商领域初学者的大众点评商业模式分析教学课件,聚焦本地生活服务平台的典型O2O运营逻辑与商业闭环设计。课件以真实企业为蓝本,系统梳理其发展历程、产品服务矩阵(含团购、签到、积分卡、无…

作者头像 李华