You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Electron捕获特定应用窗口时desktopCapturer仅返回自身如何解决

macOS 端当前问题修复步骤
  • 先确认系统权限:macOS 10.15及以上版本要求应用获得屏幕录制权限才能捕获其他应用窗口,可前往「系统设置→隐私与安全性→屏幕录制」,确认你的Electron应用(开发模式下还要确认运行应用的终端、IDE)已开启权限,权限变更后需重启应用生效。
  • 校正desktopCapturer调用逻辑:
    • 必须在主进程中调用desktopCapturer.getSources(),Electron 14+版本禁止在渲染进程直接调用该接口,需通过IPC通信在主进程执行枚举逻辑后把结果返回给渲染进程
    • 调用时明确指定types: ['window']参数,不要仅用默认的['screen']配置,若需要窗口图标可同时开启fetchWindowIcons: true
  • 校验签名权限配置:如果你的应用是经过签名的正式版本,需在entitlements配置文件中添加com.apple.security.screen-capture权限,未签名的开发版本手动授予系统权限即可正常使用。
跨平台适配核心要点
  • Windows端:Windows 10 1903及以上版本中,若要捕获UWP应用、以管理员权限运行的应用,你的Electron应用也需要以管理员权限启动,否则会出现部分窗口无法枚举的问题;如果需要捕获无标题栏、透明窗口,建议将Electron升级到20+版本,内置的捕获逻辑已经修复了相关兼容问题。
  • Linux端:需要根据桌面环境配置对应权限,GNOME环境需开启PipeWire支持,Electron 17+已内置PipeWire窗口捕获适配,无需额外修改代码,只要用户授予屏幕捕获权限即可正常枚举窗口;KDE、Xfce等桌面环境直接调用默认接口即可。
  • 原生拓展兜底方案:如果Electron内置desktopCapturer无法满足需求(比如捕获最小化窗口、高帧率采集、指定区域裁剪),可自行开发Node.js C++扩展调用各平台原生API:
    • macOS端调用CGWindowListCopyWindowInfo枚举窗口,通过IOSurface或CGDisplayCreateImage实现窗口内容采集
    • Windows端调用EnumWindows枚举窗口,通过Windows Graphics Capture API或BitBlt实现采集
    • Linux端调用Xlib的XQueryTree枚举窗口,或直接调用PipeWire原生API实现采集
目标窗口视频流获取流程

枚举到目标窗口的source对象后,调用navigator.mediaDevices.getUserMedia,传入如下配置即可获取对应的MediaStream视频流:

{
  audio: false,
  video: {
    mandatory: {
      chromeMediaSource: 'desktop',
      chromeMediaSourceId: 目标窗口的source.id,
      minWidth: 1280,
      maxWidth: 1920,
      minHeight: 720,
      maxHeight: 1080
    }
  }
}

拿到的视频流可直接赋值给video标签播放,或通过MediaRecorder进行录制,若需要降低采集开销,可直接在主进程处理流数据,无需传递到渲染进程。

内容的提问来源于stack exchange,提问作者Tylooor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:48:01