【问题标题】:Fast way to get screenshot of Windows application in C++ (Win32)?在 C++ (Win32) 中获取 Windows 应用程序屏幕截图的快速方法?
【发布时间】:2012-12-17 11:14:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ windows winapi directx gdi


    【解决方案1】:

    Vista+ 的答案在 another answer 中:窥探 DirectX 的缓冲区。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 这可能有效。然而,从 windows vista 开始,似乎我们在 winapi 中使用了 direct3d 或其他东西的新功能
      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2017-06-30
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多