思ったより簡単に書けました。
ただし、HDPCで保護されているウィンドウの画面は保存されません。(ウィンドウが黒で塗りつぶされます。)
以下、VisualStudio2026 、C# 、 .NET10 で書いてみます。
1.メイン画面をキャプチャする
引数 filePath に指定したファイル名で、「メイン画面」をキャプチャして PNG 形式で保存します。
using System.Drawing;
using System.Drawing.Imaging;
public void CaptureScreen(string filePath)
{
// スクリーンサイズの取得
Rectangle bounds = Screen.PrimaryScreen.Bounds;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save(filePath, ImageFormat.Png);
}
}
2.画面を指定してキャプチャする
複数枚のモニターを接続されている場合に、キャプチャするモニターを指定してキャプチャします。引数 index に、モニター番号を指定します(モニターは、0番から数えます)
using System.Drawing;
using System.Drawing.Imaging;
public void CaptureSpecificScreen(int index, string filePath)
{
// モニター番号が範囲外になってないか確認
if (Screen.AllScreens.Length <= index) return;
// モニター番号を指定
Screen target = Screen.AllScreens[index];
Rectangle bounds = target.Bounds;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save(filePath, ImageFormat.Png);
}
}
3.複数画面を、まとめてキャプチャーします
複数枚のモニターが接続されている場合、全画面を1つの画面に保存する場合
===
using System.Drawing;
using System.Drawing.Imaging;
public void CaptureAllScreen(string filePath)
{
// 全モニタを囲む矩形を取得
Rectangle bounds = SystemInformation.VirtualScreen;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save(filePath, ImageFormat.Png);
}
}
いくつかのパターンを試してみました。Windows 画面のキャプチャーが必要になった場合に、活用したいと思います。

