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

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

我在win32api'PrintWindow'中使用了这个函数,但是这样做效果不好。 它很慢,其他应用程序窗口中的一些组件显示为黑色矩形。

Devrexster有一个名为DExpose2的应用程序(Mac-OS式任务切换器)。 它可以快速获得其他应用程序的屏幕截图,该死的速度很快,甚至可以连续获取这些屏幕截图。

我想这是使用Direct3D获取应用程序的屏幕截图,而不是像我使用的那样使用GDI。 有没有可能为此目的使用Direct3D? 如果可能的话,哪个应该是最好的方法?

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

DExpose2可能不会“获取”屏幕截图。 即它不会将它们从视频卡传输到RAM。 这是一个缓慢的操作,将不得不跟随另一个慢速复制回到视频卡。 我期望它只是适用于几个缩放比例,并在显示卡侧进行转换,而不会有像素或像素穿过PCI-e总线。

您可以使用bitblt来获取屏幕截图。 这是一个获取整个桌面的例子:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183402(v=vs.85).aspx

您可能需要调整X,Y和大小参数,以便获得一个子集,仅对应于您关心的窗口。