第二台显示器/电视下的主WPF窗口的屏幕截图

时间:2012-04-12 20:30:39

标签: c# .net wpf

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

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

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

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();

2 个答案:

答案 0 :(得分:3)

使用Screen.AllScreens[1].Bounds而不是Screen.PrimaryScreen.Bounds

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

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

检查secondScreen == null以了解您是否有第二个屏幕。

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

答案 1 :(得分:1)

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

如果您想明确地从第二个显示中拉出(忽略显示3 ... n的情况),您可以将PrimaryScreen替换为AllScreens[1]

请记住,如果您断开第二个显示屏,这将会中断。

听起来好像你想要捕捉应用程序窗口而不是屏幕,以防应用程序没有占用整个屏幕或跨越两个屏幕。 WPF原生具有此功能:Get System.Drawing.Bitmap of a WPF Area using VisualBrush