【发布时间】:2011-11-23 21:19:35
【问题描述】:
我正在尝试制作一个 C++ 程序来捕获屏幕上显示的所有内容。
经过大量谷歌搜索后,我发现捕获特定窗口的方法, 或特定的程序屏幕,或某些程序的特定缓冲区。 不知何故,我得到了一些可以捕获屏幕的代码,但它们没有显示鼠标或视频。
然后我开始知道,无论显示什么,捕获所有内容的唯一方法是访问显卡上的视频 RAM(我的是集成显卡)。 但是我找不到任何方法来读取 VRAM 数据。
我知道 VRAM 保存进入显示器的每个像素。这就是我希望我的程序能够快速读取和读取它以获得大约 30fps 的内容。 我需要在转换为模拟之前存储在 VRAM 中的原始位图。
编辑:-我刚刚找到了这个 sdl 和像素烤面包机库......他们可以读取所谓的帧缓冲区......这是否有用 opengl 有一个名为 getPixels() 的方法可以读取缓冲区数据所有应用程序,无论正在运行什么??
【问题讨论】:
-
显存受操作系统保护。您首先需要告诉我们这将在哪个操作系统上运行。
-
带有“我知道...”的问题通常是错误的。
-
最好的解决方案是在没有鼠标的情况下捕获屏幕,然后获取鼠标坐标并出于任何目的自行绘制。
-
如果你想捕捉视频,你考虑过 RIAA 吗?他们一定会对您的活动感兴趣。
-
@jli jli 是对的,afaik 所有的 VNC 实现都是这样做的。顺便说一句,您可以查看一些 OSS VNC 实现,例如 TightVnc,看看它们是如何做到的。需要注意的是,您仍然会询问操作系统,它可以绘制您无法捕捉到的内容,例如管理员权限对话。