【问题标题】:What is a robust method for capturing screen of child window in Windows 7?在 Windows 7 中捕获子窗口屏幕的可靠方法是什么?
【发布时间】:2011-01-10 14:44:22
【问题描述】:

请原谅我的沮丧。我在很多地方都问过这个问题,但我真的认为 Windows 7 SDK 没有办法做到这一点。

我想要的只是捕获由父级创建的“子窗口”( setParent() )的一部分。我曾经使用 bitblt() 来做到这一点,但问题是子窗口可以是任何类型的应用程序,在我的例子中,OpenGL 在它的一部分中运行。如果我 bitblt() 那个,那么 OGL 部分是空白的,不会被写入 BMP。

DWM,尤其是 dwmRegisterThumbnail() 不允许生成子窗口的缩略图。所以请给我一个方向。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我已经有一段时间没有这样做了,所以我的解释可能有点含糊,但据我记得,Windows 没有“看到”窗口内呈现的 OpenGL。

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

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

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

    【讨论】:

      【解决方案2】:

      我建议你:

      1. 忘记任务的缩略图部分(就捕获而言)。
      2. 计算窗口的位置。
      3. 捕获全屏。
      4. 切除您感兴趣的区域(使用步骤 2 中的数据)。
      5. 重新缩放到适当的缩略图大小。

      对不起,它的工作量更大,但它应该工作,这比你现在拥有的更好。

      【讨论】:

        【解决方案3】:
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-14
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          相关资源
          最近更新 更多