想写一个屏幕截图录制应用程序,我从哪里开始?

Want to write a screen capture recording app, where do I start?

我想开始编写一个可以捕获屏幕内容的应用程序,或者捕获特定的全屏应用程序内容,但我不确定从哪里开始。

理想情况下,这将使用 OpenGL 编写,但我不知道 OpenGL 捕获应用程序屏幕内容的能力。如果我能用OpenGL捕捉,比方说魔兽世界,那就完美了。

the capabilities for OpenGL to capture application screen content

none存在。 OpenGL 是一个 API 用于在 屏幕上获取东西。只有一个函数可以从 OpenGL (glReadPixels) 中检索像素,并且它只适用于调用 glReadPixels 的 OpenGL 上下文绘制的内容;甚至这对于屏幕外的 FBO 之外的任何东西都是非常不可靠的,因为操作系统可以随时破坏、清除或以其他方式更改主要 window 的帧缓冲区内容。

请注意,您可以在 Internet 上找到一些关于如何使用 OpenGL 进行屏幕截图的教程。其中 none 可以在现代计算机系统上运行,因为它们所依赖的未定义行为(屏幕上的所有 windows 共享 GPU 扫描帧缓冲区的一个大的连续区域)在现代图形系统中不再成立(永远 window 拥有自己的独立帧缓冲区集,屏幕上的图像由这些帧缓冲区合成)。

捕获屏幕内容是一项高度依赖于操作系统的任务,并且没有关于如何处理它的灵丹妙药。一些系统提供随时可用的屏幕截图 APIs;然而,根据性能要求,这些屏幕截图 API 可能不是最佳选择。一些捕获程序将一个 DLL 注入到每个进程中,以便在生成的图像源处直接进入渲染进程。并且一些屏幕捕获系统安装了自定义内核驱动程序来访问显卡视频扫描缓冲区(通常映射到系统地址space),绕过显卡驱动程序来复制内容。