Windows の画面をキャプチャして保存する

Yossy
2026-01-05
2026-01-05

思ったより簡単に書けました。

ただし、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 画面のキャプチャーが必要になった場合に、活用したいと思います。