C# 有条件地从桌面屏幕截图隐藏特定窗口

C# 有条件地从桌面屏幕截图隐藏特定窗口,c#,windows,hide,screenshot,C#,Windows,Hide,Screenshot,这可能吗。我有三个窗口: 窗口1-未激活 Window2-未激活 Window3-活动 如果我拍摄桌面的屏幕截图,我希望Window3能够安静地隐藏起来。如果用户使用的是Window3,则程序不得以任何方式隐藏窗口,例如最小化窗口或任何东西。简而言之,我需要一种不引人注目的方式来隐藏桌面屏幕截图中的特定窗口。如果不做大量工作,这是不可能的。打印屏幕功能只是将桌面DC的内容复制到图像并将其放置在键盘上。它实际上不会将整个桌面重新渲染为新的DC。因此,它无法无声地删除特定的窗口 我想你可以钩住打印屏

这可能吗。我有三个窗口:

窗口1-未激活 Window2-未激活 Window3-活动
如果我拍摄桌面的屏幕截图,我希望Window3能够安静地隐藏起来。如果用户使用的是Window3,则程序不得以任何方式隐藏窗口,例如最小化窗口或任何东西。简而言之,我需要一种不引人注目的方式来隐藏桌面屏幕截图中的特定窗口。

如果不做大量工作,这是不可能的。打印屏幕功能只是将桌面DC的内容复制到图像并将其放置在键盘上。它实际上不会将整个桌面重新渲染为新的DC。因此,它无法无声地删除特定的窗口

我想你可以钩住打印屏幕按钮或函数,不管它是什么,允许它在剪贴板上创建图像。然后,钩子可以从桌面读取相关窗口的位置,并清除剪贴板上的位图区域

你的钩子会这样做:

call the normal print screen function
load image from clipboard
get location and size of Window3 from desktop
fill that rectangle in the image with black (or whatever)
put the modified image back on the clipboard

当然,假设您可以钩住打印屏幕功能。我怀疑这是可能的,尽管我从未尝试过。

想到了这一点,但不是黑色部分。我不想要一个黑色的长方形,而是一个整体picture@Aivan:要显示Window3后面的内容吗?我想你会发现,如果可能的话,你的问题是非常困难的。我已经想到了一个解决办法,但我正在寻找其他更简单的办法。这是我的看法。获取每个窗口及其位置的屏幕截图。获取任务栏的屏幕截图。获取桌面截图。然后将它们组合成一张图片。排除不必要的窗口。对于每个窗口,您都需要其屏幕截图及其在z顺序中的位置。对于非矩形窗口,或者不是100%不透明的窗口,您可能会遇到一些困难。我将把它归入非常困难的类别。