2012-04-12 7 views
2

私のアプリケーションは、2番目のモニタで使用されることもあれば、コンピュータのプライマリモニタで使用されることもあります。2番目のモニタ/ TVの下にあるメインWPFウィンドウのスクリーンショット

2番目のモニタのスクリーンショットはどのように取得できますか?

次のコードは、セカンドモニタでは動作しません... Screen.PrimaryScreen.Bounds

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'を置き換える必要があると思います。 –

答えて

3

使用Screen.AllScreens[1].Bounds isntead。

または、最初の非プライマリ画面を取得する信頼性が高い。

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

secondScreen == nullは、2番目の画面があるかどうかを確認します。

編集
また、アプリケーションが現在実行されていること、画面を与えることScreen.FromControlに興味があるかもしれません。

1

明示的にScreen.PrimaryScreenを使用しているため、このコードは2番目の画面では機能しません。

2番目のディスプレイから明示的に(3 ... nが表示されている場合を除いて)プルしたい場合は、PrimaryScreenAllScreens[1]に置き換えることができます。

これは、2番目のディスプレイを切断すると壊れることに注意してください。

アプリケーションが画面全体を占めていない場合や、2つの画面にまたがっている場合など、画面の代わりにアプリケーションウィンドウをキャプチャしたいと思うかもしれません。 WPFはこの機能をネイティブに持っています:Get System.Drawing.Bitmap of a WPF Area using VisualBrush