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

时间:2013-01-03 04:24:34

标签: c++ windows winapi directx gdi

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

我在win32api'PrintWindow'中使用该功能,但这不能正常工作。它很慢,其他应用程序窗口中的一些组件显示为黑色矩形。

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

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

2 个答案:

答案 0 :(得分:2)

Vista +的答案在another answer:snoop on DirectX的缓冲区。

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

答案 1 :(得分:1)

您可以使用bitblt获取屏幕截图。以下是获取整个桌面的示例:

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

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