【问题标题】:How do I exclude my own window without flicker when I take a screenshot?截屏时如何排除自己的窗口而不闪烁?
【发布时间】:2014-10-19 06:16:59
【问题描述】:

我们有一个基于 Delphi 的应用程序,它通过 GDI 捕获桌面。唯一的问题是在此过程中也会捕获应用程序窗口,这是我们想要避免的。

我们尝试通过在捕获操作之前和之后隐藏和显示应用程序窗口来解决此问题,但这会导致严重闪烁。

将感谢任何其他解决此问题的方法建议。

【问题讨论】:

  • 可能是桌面区域之外的移动应用程序窗口(例如Left := 10000; Top := 10000;)而不是隐藏/显示会有所帮助。
  • 您要捕获桌面不包括 delphi 应用程序窗口,但包括所有其他显示?
  • 除了隐藏您的应用程序之外,很难看到任何其他方式来做到这一点。在您将其移开之前,Windows 不会绘制应用下方的内容。
  • @SilverWarior OP 并未表示他们不关心 XP 支持...
  • @Silver 我说的是WM_PAINTInvalidateRect 等。不是在计时器上强制更新。

标签: delphi gdi flicker screen-capture


【解决方案1】:

您可以使用 Windows 放大镜功能解决此问题。您可以排除或包含任何窗口 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms692402%28v=vs.85%29.aspx)。 因此,您可以获得屏幕的屏幕截图,不包括您不需要的窗口。 这种方法适用于 Windows 上然后是 XP (7, vista, 8);

【讨论】:

  • 谢谢,正是我一直在寻找的!
【解决方案2】:

如果您想截取整个桌面并且没有应用程序窗口,我相信有两种选择。

  1. 正如您已经想到的那样,您应该在截屏之前隐藏您的应用程序窗口。由于最小化/最大化效应,现在最小化和最大化您的应用程序并不好。因此,您可以尝试将其移出可见区域,或者启用 Alpha 透明度并将其临时设置为 0(完全透明)。

  2. 另一种方法是枚举所有可见窗口,截取每个特定窗口的屏幕截图,然后通过将单独窗口的屏幕截图放置在正确位置来组合最终屏幕截图。现在这种方法的主要优点是您可以排除您想要的任何窗口,甚至可以是您无法控制的其他应用程序的窗口。但这种方法的主要缺点是速度慢得多,而且需要更多的内存。

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多