非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

C#でスクリーンショットツールを作成したのでソースコード紹介

   

日々の業務でPCのスクリーンショットを撮る機会は多いと思いますが、もうちょっと手軽に扱いたいと思ったので簡単なツールを作りました。C#を使ってアクティブウィンドウのスクリーンショットを撮影し、特定のフォルダに自動保存するものです。

ソースコードはこちら。要所要素にコメント文で解説載せています。

using System;
using System.Drawing; // 画像処理に必要な機能を提供 (Bitmap, Graphicsなど)
using System.Windows.Forms; // WindowsフォームアプリケーションのUI機能を提供 (Form, Buttonなど)
using System.Threading; // スレッド処理 (Sleepメソッドなど)
using System.Drawing.Imaging; // 画像フォーマット関連 (ImageFormatなど)

class Test
{
	// アプリケーションのエントリポイント
	static void Main()
	{
		Application.Run(new TestForm()); // TestFormのインスタンスを生成し、アプリケーションを実行
	}
}

class TestForm : Form // Formクラスを継承し、ウィンドウを作成
{
	// コンストラクタ: フォームの初期設定を行う
	public TestForm()
	{
		this.StartPosition = FormStartPosition.CenterScreen; // フォームを画面中央に表示
		this.Width = 350; // フォームの幅を設定
		this.Height = 200; // フォームの高さを設定
		this.Text = "スクショ"; // フォームのタイトルバーのテキスト

		// ボタンの作成と設定
		Button tb1 = new Button()
		{
			Size = new Size(200, 50), // ボタンのサイズ
			Text = "Screen Shot", // ボタンに表示されるテキスト
			Font = new Font("Meiryo UI", 14, FontStyle.Regular), // ボタンのフォント設定
			Location = new Point(50, 50), // フォーム内でのボタンの位置
			Parent = this // ボタンの親をこのフォームに設定
		};
		tb1.Click += new EventHandler(this.Button1_Click); // ボタンがクリックされたときのイベントハンドラを登録
	}

	// ボタンクリック時のイベントハンドラ
	private void Button1_Click(object sender, EventArgs e)
	{
		Console.WriteLine("3秒後にアクティブウィンドウのスクリーンショットを撮影します...");
		Thread.Sleep(3000); // 3秒間処理を一時停止 (スクリーンショットを撮る準備のため)

        	// 現在日時を取得
		DateTime now = DateTime.Now;
        	// 「yyyymmdd」形式に変換
        	string nowDate = now.ToString("yyyyMMdd");

		// スクリーンショットを撮影
		// 指定されたサイズ (1350x750) のBitmapオブジェクトを作成
		using (Bitmap screenshot = new Bitmap(1350, 750))
		{
			// BitmapオブジェクトからGraphicsオブジェクトを作成 (画像描画に使用)
			using (Graphics g = Graphics.FromImage(screenshot))
			{
				// 画面の座標 (250, 200) から、サイズ (1350, 750) の範囲をBitmapの (0, 0) へコピー
				g.CopyFromScreen(250, 200, 0, 0, new Size(1350, 750));
			}

			// 画像を保存
			string filePath = "my_screenshot.png";
			screenshot.Save(filePath, ImageFormat.Png); // 指定されたパスにPNG形式で画像を保存

			this.Activate(); // スクリーンショットツール自身のウィンドウをアクティブにする
			this.Focus(); // スクリーンショットツール自身のウィンドウにフォーカスを当てる
			Console.WriteLine("スクリーンショットを保存しました:" + filePath); // コンソールに保存パスを表示
			MessageBox.Show("スクリーンショットを保存しました"); // 保存完了メッセージをポップアップ表示
		}
	}
}
 

 

コンパイルし実行するとフォームが現れるので、ボタンを押して3秒後にアクティブウィンドウのスクリーンショット(指定箇所の切り抜き)が開始されます。

 

スポンサーリンク

 - C#応用編