WPFでSendKeysメソッドを使いスクリーンキャプチャを取得する方法を紹介します。
WPFでもWinFormアプリケーションと同様に、CopyFromScreenメソッドを使ってスクリーンキャプチャを取得することもできます。詳細は
こちら
コード
private void button2_Click(object sender, RoutedEventArgs e)
{
//アクティブウィンドウをスクリーンキャプチャする場合
//System.Windows.Forms.SendKeys.SendWait("%{PRTSC}");
//全画面をスクリーンキャプチャする場合
System.Windows.Forms.SendKeys.SendWait("^{PRTSC}");
IDataObject dobj = Clipboard.GetDataObject();
if (dobj.GetDataPresent(DataFormats.Bitmap) == true) {
System.Windows.Interop.InteropBitmap ibmp
= (System.Windows.Interop.InteropBitmap)dobj.GetData(DataFormats.Bitmap);
BmpBitmapEncoder enc = new BmpBitmapEncoder();
//JpegBitmapEncoder enc = new JpegBitmapEncoder();//JPEGファイルで保存する場合
enc.Frames.Add(BitmapFrame.Create(ibmp));
System.IO.FileStream fs = new System.IO.FileStream(@"c:\data\screen2.bmp",
System.IO.FileMode.Create, System.IO.FileAccess.Write);
enc.Save(fs);
fs.Close();
fs.Dispose();
}
}
説明
System.Windows.Forms.SendKeys.SendWait("^{PRTSC}");
でプログラムからキーを送信します。 "^{PRTSC}"は Ctrl+PrintScreen キーとなります。
IDataObject dobj = Clipboard.GetDataObject();
にてクリップボードからデータを取得します。
if (dobj.GetDataPresent(DataFormats.Bitmap) == true) {
にてクリップボードから取得したデータがビットマップ形式か判定し、ブットマップ形式であるならば
InteropBitmap ibmp = (InteropBitmap)dobj.GetData(DataFormats.Bitmap);
にて画像データを取り出します。 WPFアプリケーションではWinFormアプリケーションと異なり、取り出される画像はSystem.Windows.Interop.InteropBitmap となります。(WinFormアプリケーションの場合はSystem.Drawing.Bitmap)
Bitampオブジェクトではsaveメソッドで保存しますが、InteropBitmapを保存する場合はBitmapEncoderを用いて保存します。
BmpBitmapEncoder enc = new BmpBitmapEncoder();
にて、画像を保存するためのBitmapEncorderを作成します。
enc.Frames.Add(BitmapFrame.Create(ibmp));
System.IO.FileStream fs = new System.IO.FileStream(@"c:\data\screen2.bmp",
System.IO.FileMode.Create, System.IO.FileAccess.Write);
enc.Save(fs);
fs.Close();
fs.Dispose();
BitmapEncorderを利用して画像を"c:\data"に screen2.bmpという名前で保存します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2010-10-28