Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获桌面排除(在“我的活动窗口”下)_C#_Wpf_Windows_Capture - Fatal编程技术网

C# 捕获桌面排除(在“我的活动窗口”下)

C# 捕获桌面排除(在“我的活动窗口”下),c#,wpf,windows,capture,C#,Wpf,Windows,Capture,关于捕获活动窗口或桌面包括活动窗口,有许多问题,但我的问题不同: 我希望捕获桌面正好在我的WPF窗口下。我基于以下代码创建了一个示例项目: using (var screenBmp = new Bitmap((int)elementSize.Width,(int)elementSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)) { using (var bmpGraphics = Graphics.FromI

关于捕获活动窗口或桌面包括活动窗口,有许多问题,但我的问题不同:

我希望捕获桌面正好在我的WPF窗口下。我基于以下代码创建了一个示例项目:

using (var screenBmp = new Bitmap((int)elementSize.Width,(int)elementSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
    using (var bmpGraphics = Graphics.FromImage(screenBmp))
    {
        bmpGraphics.CopyFromScreen((int) TopLeftPoint.X, (int)TopLeftPoint.Y, 0, 0, screenBmp.Size);

        return  Imaging.CreateBitmapSourceFromHBitmap(
                        screenBmp.GetHbitmap(),
                        IntPtr.Zero,
                        Int32Rect.Empty,
                        BitmapSizeOptions.FromEmptyOptions());
    }
}
它可以通过
CopyFromScreen
捕获我的元素所在的桌面,但结果是我的元素的图片,但我希望捕获我的元素下的桌面,而不是在我的窗口中包含该元素

注意:我的元素(例如矩形)背景为半透明或非透明(具有图像或纯色)

上面的代码结果如下图所示(红色边框内的部分)。

注意:树是我的桌面背景图片&另一个应用程序的一部分在图像中可见。我的窗户在他们上面

您可以看到它是包含我的矩形(元素)和其他控件,但我希望捕获我的元素下的桌面,排除它本身和其他元素的视觉


现在我的问题是,如何在WPF窗口中,在2模式下捕获我的元素下的桌面,以使结果如下图所示:

  • A)包括我的窗口下的所有内容(窗口和…),如下所示:

  • B)排除“我的窗口”下的所有其他内容(排除所有打开的窗口&…)。只有桌面背景和图标(如果我的窗口位于图标上方)。像这样:

你知道有什么特殊的库或API来捕获上述级别的桌面吗


注意:我的工作平台是WPF+.Net 4.5

这通常是不可能的。@IInspectable,我找到了一些API,比如
放大API Overview
,但我不确定它是否可以捕获我元素下的图像:放大API放大可见的内容。它不能用来发现被窗口遮挡的区域。@MarkFeldman:A不可能,除非先隐藏窗口,拍摄快照并再次显示窗口。从概念上讲,看你的窗户后面和其他人的窗户后面没有区别。它只是不受支持。在这种情况下,我建议查看一下。一般来说,这是不可能的。@IInspectable,我找到了一些API,如
放大API概述
,但我不确定它是否可以捕获我元素下的图像:放大API放大了可见的内容。它不能用来发现被窗口遮挡的区域。@MarkFeldman:A不可能,除非先隐藏窗口,拍摄快照并再次显示窗口。从概念上讲,看你的窗户后面和其他人的窗户后面没有区别。它只是不受支持。如果是这样的话,我建议您研究一下。