トップへ(mam-mam.net/)

デスクトップ画面全体のスクリーンショットを取得 ~Delphiソースコード集

検索:

デスクトップ画面全体のスクリーンショットを取得 ~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をクリックすると、マルチモニタ全体のスクリーンキャプチャを取得します。
以下はトリプルモニターの場合の例です。