4

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

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

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

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

4

2 回答 2

3

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

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

于 2013-01-03T09:24:55.373 回答
2

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

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

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

于 2013-01-03T05:07:05.953 回答