在 C++ (Win32) 中快速获取 Windows 应用程序屏幕截图的方法?

jon*_*ham 5 c++ windows directx winapi gdi

当我的应用程序需要获取其他 Windows 应用程序的屏幕截图时,我遇到了问题。

我正在使用 win32api 'PrintWindow' 中的函数,但这效果不佳。它很慢,并且其他应用程序窗口内的某些组件显示为黑色矩形。

Devrexster 有一个名为 DExpose2 的应用程序(Mac OS 风格的任务切换器)。它可以非常快地获取其他应用程序的屏幕截图,非常快,甚至可以连续获取这些屏幕截图。

我猜它是使用 Direct3D 来获取应用程序的屏幕截图,而不是像我正在使用的那样使用 GDI。是否可以使用 Direct3D 来实现此目的?如果可能的话,哪种方式应该是最简洁的方式?

MSa*_*ers 4

Vista+ 的答案在另一个答案中:窥探 DirectX 的缓冲区。

DExpose2 可能无法“获取”屏幕截图。即它不会将它们从显卡传输到 RAM。这是一个缓慢的操作,并且必须随后将另一个缓慢复制回视频卡。我希望它只是在显卡端应用一些缩放和移动变换,没有像素或纹素穿过 PCI-e 总线。