2012-04-12 36 views
2

我在第二個監視器上使用我的應用程序,有時在計算機的主監視器上使用我的應用程序。在第二個監視器/電視下的主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(); 
+1

我認爲你需要用更合適的東西來替換'PrimaryScreen'。 – 2012-04-12 20:33:59

回答

3

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

或者更可靠的獲得第一個非主屏幕。

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

支票secondScreen == null要知道,如果你有一個secondScreen。

編輯
您可能也有興趣Screen.FromControl,讓該應用程序正在運行的屏幕。

1

該代碼不適用於您的第二個屏幕,因爲它明確使用Screen.PrimaryScreen

如果您想明確從第二個顯示屏拉出(忽略有3 ... n個顯示屏的情況),則可以用AllScreens[1]替換PrimaryScreen

請記住,如果您斷開第二個顯示屏的話,這會中斷。

這聽起來像也許你想捕捉你的應用程序窗口,而不是屏幕,以防應用程序不佔用整個屏幕或跨越兩個屏幕。 WPF本身具有這種功能:Get System.Drawing.Bitmap of a WPF Area using VisualBrush

相關問題