我正在尝试制作一个C ++程序来捕获屏幕上显示的所有内容。
经过大量谷歌搜索,我发现的是捕获特定窗口的方法, 或特定的程序屏幕,或某个程序的特定缓冲区。 不知怎的,我得到了一些可以捕捉屏幕的代码,但是它们没有显示鼠标或视频。
然后我才知道,无论显示什么,捕获所有内容的唯一方法是访问显卡上的视频RAM(我的是集成的视频RAM)。 但我找不到任何方法来读取VRAM数据。
我知道VRAM会保存每个进入显示器的像素。这就是我希望我的程序能够快速读取和读取它以获得大约30fps的内容。 我需要在转换为模拟之前存储在VRAM中的原始位图。
编辑: - 我刚发现这个sdl和像素烤面包机库...他们可以读取所谓的帧缓冲区....这会有什么用处,而且opengl有一个叫做getPixels()的方法可以读取缓冲区数据所有应用程序,无论正在运行什么?
答案 0 :(得分:0)
使用硬件覆盖,实际上可能没有包含屏幕图像和鼠标光标的图像。
在没有鼠标光标的情况下捕获屏幕的代码正在读取VRAM。
答案 1 :(得分:0)
最有可能你必须为Windows开发内核模式驱动程序,因为它只能从操作系统内核中直接访问所有内容。这不是一项容易的任务,如果你试图签署你的驱动程序,微软很可能会拒绝。或者,如果他们签名,他们可能很快就会撤销签名。简而言之,由于相关的法律问题,您在分发驱动程序时会遇到问题。
另一种选择是找到一个开源的PC模拟器,其中Windows可以运行并且有问题的视频可以播放并破解它以访问VM的内存。同样合法的东西。
除此之外,我认为没有一种保证获取所有数据的方法(除了黑客攻击硬件或者只是在相机上捕捉屏幕)。