我们可以把屏幕捕捉API大致分为三个主要层次,从最传统到最现代化。
Windows上屏幕捕捉功能的三大API层级
Windows上的远程软件开发者有更多、更高效的选择。我们可以将它们分为三个主要层级:
1. 层级一:GDI (传统方式)
这是最古老、兼容性最好但效率最低的一层。
- 核心API:
BitBlt: C/C++中最常用的函数,用于将像素块从一个设备上下文(DC)复制到另一个。获取桌面DC,创建一个兼容的内存DC,然后把桌面像素复制过来。PrintWindow: 可以捕捉到被其他窗口遮挡的一部分窗口内容,但并非万能。- 在.NET (C#) 中,对应的封装是
Graphics.CopyFromScreen。
- 工作原理: 基于CPU的像素复制。它请求Windows将最终绘制好的桌面图像复制一份到程序的内存缓冲区。
- 优点:
- 兼容性极佳:从最早的Windows版本一直到现在都能用。
- 简单:API调用相对直接。
- 缺点:
- 性能差:在启用了硬件加速的现代桌面(Aero效果、DirectX游戏等)上效率极低,因为它需要将GPU渲染好的数据回读到系统内存,非常消耗CPU和内存带宽。
- 闪烁问题:频繁捕捉可能会导致鼠标指针闪烁。
- 内容丢失:无法捕捉到某些使用DirectX或Vulkan等现代图形API渲染的独占全屏应用(例如游戏)的画面。
- 举例:
- 早期的VNC软件 (如RealVNC的旧版本) 和许多简单的内部远程工具。
- 上面提到的
inletex easy meeting classic。
2. 层级二:DXGI Desktop Duplication API (现代高效方式)
这是从 Windows 8 开始引入的现代化API,是目前许多高性能远程软件的首选。
- 核心API:
DXGI (DirectX Graphics Infrastructure)接口,特别是IDXGIOutputDuplication。
- 工作原理: 此API工作在DirectX层面,直接与显示驱动和GPU交互。它不再是“复制像素”,而是允许应用程序“复制”桌面图像的GPU纹理(Texture)。这意味着数据可以在GPU显存中直接处理,避免了昂贵的CPU读写操作。它还能高效地只提供屏幕上发生变化的部分(脏矩形, Dirty Rects),极大减少了数据传输量。
- 优点:
- 性能极高:捕捉操作主要由GPU完成,CPU占用率非常低。
- 效率高:可以只获取屏幕更新的区域,无需每次都传输整个屏幕。
- 内容完整:能够捕捉到几乎所有内容,包括DirectX渲染的游戏和应用。
- 缺点:
- 实现复杂:需要开发者对DirectX有深入的了解。
- 兼容性:仅支持 Windows 8 及以上版本。
- 权限问题:可以捕捉到UAC等安全桌面(当程序以SYSTEM权限运行时),这既是优点也是安全风险。
- 举例:
- TeamViewer、AnyDesk、Splashtop 等主流商业远程桌面软件都在其高性能模式下使用此技术。
- OBS Studio 的“显示器捕获”功能在旧版本或特定模式下也使用它。
- Parsec,一款专注于低延迟游戏串流的软件,其核心就是基于此类GPU层面的捕捉技术。
3. 层级三:Windows Graphics Capture (WGC) (最新、最安全的方式)
这是在 Windows 10 (1803版本) 后引入的最新、最推荐的API。它在DXGI的基础上进行了封装,更易用、更安全。
- 核心API:
Windows.Graphics.Capture命名空间下的API,如GraphicsCapturePicker,GraphicsCaptureItem,GraphicsCaptureSession。
- 工作原理: 底层技术与DXGI Desktop Duplication类似,都是基于GPU的高效捕捉。但它在顶层增加了重要的安全和易用性封装。它强制要求用户通过一个标准的系统对话框来选择要分享的窗口或显示器。
- 优点:
- 安全性好:应用程序不能“偷偷”捕捉屏幕,必须由用户明确授权。被捕捉的窗口或屏幕通常会有一个黄色的边框作为提示。
- 易于使用:API设计比原生DXGI简单得多,开发者无需深入了解DirectX的复杂细节。
- 窗口捕捉能力强:可以完美捕捉单个窗口的内容,即使该窗口被其他窗口遮挡或最小化(只要该应用没因为被遮挡而停止渲染),这是GDI和DXGI都很难做到的。
- 跨GPU支持好:在有多显卡的笔记本上表现比DXGI更稳定。
- 缺点:
- 需要用户交互:无法在后台服务中静默启动捕捉,必须有用户手动选择的过程。
- 无法捕捉安全桌面:出于安全考虑,无法捕捉UAC弹窗等界面。
- 兼容性:需要较新版本的 Windows 10 或 Windows 11。
- 举例:
- Windows自带的截图和录屏工具 (Win+G)。
- OBS Studio 最新的“Windows Graphics Capture”源,这是目前在Windows上捕捉游戏的推荐方式。
- Microsoft Teams、Discord、Slack 等协作软件的屏幕共享功能。
总结对比
| 层级 | API/技术 | 核心原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|---|
| 层级一 (传统) | GDI (BitBlt) | CPU像素复制 | 兼容性好、简单 | 性能差、无法捕捉硬件加速内容 | 老旧VNC, inletex, 简单截图工具 |
| 层级二 (现代) | DXGI Desktop Duplication | GPU纹理复制 | 性能极高、效率高 | 复杂、仅限Win8+ | TeamViewer, AnyDesk, Parsec, OBS(旧) |
| 层级三 (最新) | Windows Graphics Capture (WGC) | GPU复制 + 安全封装 | 安全、易用、窗口捕捉能力强 | 需用户授权、仅限新版Win10+ | Teams, Discord, OBS(新), Windows录屏 |
421

被折叠的 条评论
为什么被折叠?



