Delphi 中的桌面复制 API






4.09/5 (10投票s)
Delphi 中的桌面复制 API
引言
一些远程访问应用程序通过安装显示镜像驱动程序来加速远程计算机上的屏幕捕获。镜像驱动程序自 Windows 2000 起就存在。但是,对于 Windows 8 及更高版本,镜像驱动程序将不再安装。尽管如此,微软决定提供另一种解决方案。
这种解决方案称为桌面复制 API,它是 DirectX 11 的一部分,更准确地说,是 DXGI 1.2 更新。实际上,DirectX 11 API 可以回退到版本 10 或 9,如果系统不支持 DirectX 11,但 DXGI 不行。此外,Windows 7 和 Vista 将不会有 DXGI 1.2 - 您需要 Windows 8 或更高版本。
为了熟悉桌面复制 API,我研究了微软提供的示例。事实上,我没有在其他地方找到更多的示例。
微软提供的示例在一个桌面上运行,但这对于它的目的来说已经足够了。
DirectX 是基于 COM 的,这意味着您需要掌握 C 或 C++ 才能正确处理它,对吗?不完全是,Delphi 也非常适合处理 COM 接口。我会说,使用 Delphi,COM 甚至可能更容易,因为它管理着引用计数。
示例
我制作了 2 个示例
- 第一个示例模仿了微软的示例。我称它为控制台示例,尽管实际上并没有控制台。它使用 Windows API 创建一个窗口,启动一个或多个线程进行桌面复制,然后进入一个无限消息循环来使用捕获的帧更新创建的窗口。
- 第二个示例是按照 Delphi 的做事方式完成的。这里,创建了一个 VCL 窗体,并且捕获的帧会更新窗体内的
TPanel
组件。我选择TPanel
是因为它是一个TWinControl
的后代,因此具有HWND
。
详细说明
- DirectX 头文件来自下面的参考资料 3。非常棒的工作(确实做了很多!)
- 像素着色器和顶点着色器不会被示例直接编译。相反,我将预编译的结果插入到
PixelShader
和VertexShader
单元中。