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

Fast way to get screenshot of Windows application in C++ (Win32)?

本文关键字:Windows 获取 应用程序 屏幕截图 c++ Win32      更新时间:2023-10-16

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

我正在使用win32api ' printwwindow '中的函数,但这不能很好地工作。它是缓慢的,并且在其他应用程序的窗口中的一些组件显示为黑色矩形。

有一个应用程序(mac - os风格的任务切换器)叫做DExpose2由Devrexster。它可以非常快地获取其他应用程序的截图,非常快,甚至可以连续获取这些截图。

我猜它是使用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和大小参数,以便您得到一个子集,对应于您所关心的窗口。