什么是在Windows 7中捕获子窗口屏幕的强大方法?

时间:2010-01-28 20:58:09

标签: windows winapi windows-7 screen screen-capture

请原谅我的沮丧。我在很多地方都询问过这个问题,我认为在Windows 7 SDK中没有办法实现这一目标。

我想要的只是捕捉父母创建的'子窗口'(setParent())的一部分。我曾经用bitblt()来做这件事,但问题是子窗口可以是任何类型的应用程序,在我的情况下,OpenGL在其中的一部分中运行。如果我bitblt()那么,那么OGL部分是空白的,不会被写入BMP。

DWM,特别是dwmRegisterThumbnail()不允许生成子窗口的缩略图。所以请给我指点。

感谢。

4 个答案:

答案 0 :(得分:1)

我已经做了一段时间了,所以我的解释可能有点模糊,但从我记忆中看,Windows并没有“看到”在窗口内呈现的OpenGL。

Windows所做的是以指定的大小创建窗口,然后将其“交给”OpenGL进行渲染。这意味着您无法获得从代码的Windows端渲染的像素。

当我们想要捕捉3D时,我们必须将屏幕重新渲染为屏幕外的位图,然后保存(或打印)。

显然整个屏幕截图(打印屏幕)都有效,因为它正在读取最终像素。

答案 1 :(得分:1)

我建议你:

  1. 忘记任务的缩略图部分(就捕获而言)。
  2. 计算窗口的位置。
  3. 全屏捕捉。
  4. 切除您感兴趣的区域(使用步骤2中的数据)。
  5. 重新缩放到相应的缩略图大小。
  6. 抱歉,它的工作量更大,但应该可以正常工作,这比你现在的工作要好。

答案 2 :(得分:0)

答案 3 :(得分:0)

我无法访问任何可能打开的子窗口的源代码,包括OpenGL的窗口