【问题标题】:Taking screenshot of a partially hidden window in a programmatic way以编程方式截取部分隐藏的窗口
【发布时间】:2011-08-12 16:49:24
【问题描述】:

是否可以获得不在顶部的窗口的屏幕截图,即如果它被另一个窗口部分隐藏,而不会将其带到顶部?

【问题讨论】:

  • 您可以尝试sending WM_PRINT / WM_PRINTCLIENT 到窗口,以便它“打印”到您提供的 HDC。然而,这并不适用于每个应用程序,因此您需要自己测试它(并对如何从 .NET 调用它进行一些研究)。
  • 来自你自己进程的delphi窗口,还是其他窗口?

标签: c# .net screenshot


【解决方案1】:

不幸的是,在 C# 中截屏并非易事,您可以根据当前窗口或视口创建图形对象并捕获它,但这不是您所要求的。

这个

Screenshot of Hidden Window

可能会有所帮助,但无论如何您都必须使用互操作代码来执行此操作。

我敢说,受支持的东西并不常见,因为一个程序不知道另一个程序中显示的内容;这可能是一个令人讨厌的漏洞。

【讨论】:

  • 另一个问题是隐藏窗口没有收到WM_PAINT对隐藏部分的请求。截屏需要重新绘制这些部分,这是最简单的方法,首先将窗口再次置于顶部。但是,在 Windows-7 上,任务栏“知道”鼠标悬停的所有内容,也许还有另一种方法?
【解决方案2】:

您不需要截图,如果是您的应用程序,您可以使用表单对象的Control.DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

如果是其他应用程序窗口,可以尝试非托管方式获取窗口的UI。我不记得所有的方法,但我已经尝试过并且它正在工作。可能是GetWindowSendMesageWM_PRINT / WM_PRINTCLIENT

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2022-07-09
    相关资源
    最近更新 更多