繁体   English   中英

第二个监视器/电视下的WPF主窗口的屏幕截图

[英]Screenshot of the main WPF window under second monitor/TV

我在计算机的第二台显示器上使用我的应用程序,有时在计算机的主显示器上使用。

如何获取第二台显示器的屏幕截图?

以下代码不适用于第二台显示器...

Graphics gfx;
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
gfx = Graphics.FromImage(bmp);
gfx.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Jpeg);
byte[] bitmapData = ms.ToArray();

使用Screen.AllScreens[1].Bounds .Screen.PrimaryScreen.Bounds的Screen.PrimaryScreen.Bounds

或更可靠地获得第一个非主屏幕。

var secondScreen = Screen.AllScreens.Where(screen => !screen.Primary).FirstOrDefault();

检查secondScreen == null以了解您是否具有secondScreen。

编辑
您可能还对Screen.FromControl感兴趣,它提供了应用程序当前正在运行的屏幕。

该代码不适用于您的第二个屏幕,因为它显式使用了Screen.PrimaryScreen

如果要显式地从第二个显示中拉出(忽略具有3…n个显示的情况),则可以用AllScreens[1]替换PrimaryScreen

请记住,如果断开第二个显示器的连接,这将中断。

听起来好像您想捕获应用程序窗口而不是屏幕,以防应用程序无法占据整个屏幕或跨两个屏幕。 WPF本身具有此功能: 使用VisualBrush获取WPF区域的System.Drawing.Bitmap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM