デスクトップ画面全体のスクリーンショットを取得 ~Delphiソースコード集
デスクトップ画面全体のスクリーンショット(画面全体のキャプチャ)を取得してBitmapに保存します。
画面設計
「ファイル」⇒「新規作成」⇒「Windows VCLアプリケーション」をクリックしてプロジェクトを作成します。
フォームにTButtonを2個と、TImageを1つドラッグ&ドロップします。
ソースコードの記述
Button1をダブルクリックしてソースコードを記述します。
また、Button2もダブルクリックしてソースコードを記述します
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Canvas:TCanvas; h:HWND; r1:TRect; begin //プライマリモニタ(主ディスプレイ)のスクリーンキャプチャを取得する Image1.Proportional:=True; Image1.Stretch:=True; Self.Hide; try Sleep(500); Canvas:=TCanvas.Create; try h:=GetDesktopWindow; GetWindowRect(h,r1); Canvas.Handle:=GetDC(h); try Image1.Picture.Bitmap.Width:=r1.Width; Image1.Picture.Bitmap.Height:=r1.Height; Image1.Picture.Bitmap.Canvas.CopyRect(r1, Canvas, r1); finally ReleaseDC(h,Canvas.Handle); end; finally Canvas.Free; end; finally Self.Show; end; end; procedure TForm1.Button2Click(Sender: TObject); var Canvas:TCanvas; h:HWND; r1,r2:TRect; begin //マルチモニタ全体のスクリーンキャプチャを取得する Image1.Proportional:=True; Image1.Stretch:=True; Self.Hide; try Sleep(500); Canvas:=TCanvas.Create; try h:=GetDesktopWindow; r1:=Screen.DesktopRect; Canvas.Handle:=GetDC(h); try r2.Left:=0; r2.Top:=0; r2.Width:=r1.Width; r2.Height:=r1.Height; Image1.Picture.Bitmap.Width:=r1.Width; Image1.Picture.Bitmap.Height:=r1.Height; Image1.Picture.Bitmap.Canvas.CopyRect(r2, Canvas, r1); finally ReleaseDC(h,Canvas.Handle); end; finally Canvas.Free; end; finally Self.Show; end; end; end.
実行
Button1をクリックすると、プライマリモニタ(主ディスプレイ)のみのスクリーンキャプチャを取得します。
Button2をクリックすると、マルチモニタ全体のスクリーンキャプチャを取得します。
以下はトリプルモニターの場合の例です。