.NET TIPS

アプリケーション画面のハードコピーを保存するには?

デジタルアドバンテージ
2004/05/07

 Windowsアプリケーションで画面のキャプチャ(画面のハードコピーの取得)を行い、それをファイルに保存する場合には、その機能を独自に実装する必要がある。もちろん画面キャプチャ・ソフトを使ってもよいし、[Alt]キー+[Print Screen]キーを利用してウィンドウのスクリーン・ショットをクリップボードにコピーし、それを画像処理ソフトなどにペースト(貼り付け)してから保存することも可能だ(これについてはWindows TIPS:「アクティブウィンドウだけをキャプチャする方法」で解説されている)。

 しかし、後者の[Alt]キー+[Print Screen]キーによる方法をプログラムから実行することにより、画面キャプチャをファイルに保存するという機能を簡単にアプリケーションに追加することができる。このための具体的な手順は次のようになる。

  1. [Alt]キー+[Print Screen]キーを自分自身に送る
  2. クリップボードに格納されたキャプチャ画像を取得する
  3. 取得した画像をファイルに保存する

 この手順のうち、2.と3.については「TIPS:クリップボードからデータを受け取るには?」と「TIPS:画像をファイルに保存するには?」で解説しているので、詳しくはそちらを参照していただきたい。

アプリケーションへのキーストロークの送信

 アプリケーションへのキー入力の送信は、SendKyesクラス(System.Windows.Forms名前空間)のSendWaitメソッドを使用すればよい。このメソッドは、パラメータで指定されたキーストロークをアクティブなアプリケーションに送信し、それが処理されるまで待機する(これにより、ユーザーがアプリケーションに対してキー入力を行った場合と同等な状況を作り出すことができる)。

 SendWaitメソッドのパラメータには、送信するキーストロークを文字列として記述する。[Print Screen]キーなどの特殊なキーは、“{PRTSC}”のように、あらかじめ定められたコードにより記述できる(コードの一覧はリファレンス・マニュアルのSendKeysクラスの項目に記載されている)。また、[Alt]キーとの組み合わせとして送信する場合には、そのコードの前に“%”を付ければよい。

 よって、[Alt]キー+[Print Screen]キーの組み合わせをアプリケーションに送信するには、次のような記述となる*

SendKeys.SendWait("%{PRTSC}");

* プログラムからアプリケーションにキーを直接送信して画面キャプチャを行う場合には、[Print Screen]キーだけを送信しても、そのアプリケーション単体の画面キャプチャが行えるようである(全画面のキャプチャとはならない)。

画面キャプチャをファイルに保存するサンプル・プログラム

 画面キャプチャ機能を追加したWindowsアプリケーションを実際に作成してみよう。ここでは、フォーム上に配置した[画面キャプチャ]ボタンが押された場合に、画面のハードコピーを「c:\screen.jpg」というファイル名のJPEGファイルとして保存するものとする。

 まず、Visual Studio .NETでWindowsアプリケーションのプロジェクトを作成し、次の図のようにTextプロパティを「画面キャプチャ」に設定したButtonコントロールを適当な位置に配置する。キャプチャされたことが確認しやすいように、ここではボタン以外にもいくつかのコントロールをフォームに配置している。

[画面キャプチャ]ボタンと適当なコントロールを配置したWindowsフォーム

 次に、いま配置した[画面キャプチャ]ボタンをダブルクリックし、次のコードを記述する。

private void button1_Click(object sender, System.EventArgs e) {
  // [Alt]キー+[Print Screen]キーの送信
  SendKeys.SendWait("%{PRTSC}");

  // クリップボードに格納された画像の取得
  IDataObject data = Clipboard.GetDataObject();
  if (data.GetDataPresent(DataFormats.Bitmap)) {
    Bitmap bmp = (Bitmap)data.GetData(DataFormats.Bitmap);
    // 取得した画像の保存
    bmp.Save(@"c:\screen.jpg", ImageFormat.Jpeg);
  }
}
[画面キャプチャ]ボタンをダブルクリックして記述するコード(C#)
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' [Alt]キー+[Print Screen]キーの送信
  SendKeys.SendWait("%{PRTSC}")

  ' クリップボードに格納された画像の取得
  Dim data As IDataObject = Clipboard.GetDataObject()
  If Data.GetDataPresent(DataFormats.Bitmap) = True Then
    Dim bmp As Bitmap = CType(data.GetData(DataFormats.Bitmap), Bitmap)
    ' 取得した画像の保存
    bmp.Save("c:\screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
  End If
End Sub
[画面キャプチャ]ボタンをダブルクリックして記述するコード(VB.NET)

 プログラムを実行して[画面キャプチャ]ボタンを押せば、Cドライブのルート・ディレクトリに「screen.jpg」というJPEGファイルが作成されているはずだ。End of Article

カテゴリ:Windowsフォーム 処理対象:キーボード
カテゴリ:Windowsフォーム 処理対象:クリップボード
使用ライブラリ:SendKyesクラス(System.Windows.Forms名前空間)
使用ライブラリ:Clipboardクラス(System.Windows.Forms名前空間)
使用ライブラリ:IDataObjectインターフェイス(System.Windows.Forms名前空間)
使用ライブラリ:DataFormatsクラス(System.Windows.Forms名前空間)
関連TIPS:クリップボードからデータを受け取るには?
関連TIPS:
画像をファイルに保存するには?
 
この記事と関連性の高い別の.NET TIPS
スクリーンやウィンドウをキャプチャするには?
コントロールに対するキー入力をフォームで処理するには?
Windowsアプリケーションの位置やサイズを保存するには?
クリップボードへデータを送るには?
アプリケーション設定を活用するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ


- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る
- PR -

ホワイトペーパーTechTargetジャパン

ソリューションFLASH

「ITmedia マーケティング」新着記事

あとらす二十一、「Yahoo!プロモーション広告審査エクスプレスパス」を取得
Webコンサルティング事業を手掛けるあとらす二十一は10月31日、Yahoo! プロモーション広...

日立システムズ、「2014CRMベストプラクティス賞」を受賞
日立システムズは10月30日、ユーザーへの窓口対応を請け負う同社コンタクトセンターの取...

ブランドコンテンツは国境を超えて拡散する
BrandedとSocial@Ogilvy(ソーシャル・アット・オグルヴィ)が主催するアジア最大規模の...