アクティブ画面コピー

下記コードではボタンを押した瞬間にキャプチャーされますので
Sleep(1000); //1秒遅延
などを挿入して遅延させる工夫が必要です。

使用コンポーネント
TButton TImage


procedure TForm1.Button1Click(Sender: TObject);
var
 Bitmap1: TBitmap;
 ScreenDC: HDC;
 Rect1: TRect;
 ActHwnd: HWND;
 TopBuffer, LeftBuffer, WidthBuffer, HeightBuffer: Integer;
begin
 Image1.Picture.Bitmap := Form1.GetFormImage;

 Bitmap1 := TBitmap.Create;
 try
  {↓最前面のWindowHandle取得}
  ActHwnd := GetForegroundWindow;

  {↓取得したウィンドウが非表示or最小化されている場合は次のWindowを取得}
  while (ActHwnd <> HWND(nil)) do
  begin
   if IsWindowVisible(ActHwnd) and (not IsIconic(ActHwnd)) then
   Break;
   ActHwnd := GetWindow( ActHwnd, GW_HWNDNEXT);
  end;

  if ActHwnd = HWND(nil) then
   raise Exception.Create('Windowの取得に失敗しました');

  GetWindowRect( ActHwnd, Rect1);

  {↓デスクトップからはみ出す範囲を削除}
  if Rect1.Left < 0 then
   LeftBuffer := -(Rect1.Left)
  else
   LeftBuffer := 0;
  if Rect1.Top < 0 then
   TopBuffer := -(Rect1.Top)
  else
   TopBuffer := 0;
  if Rect1.Right > Screen.Width then
   WidthBuffer := Screen.Width - Rect1.Left - LeftBuffer
  else
   WidthBuffer := Rect1.Right - Rect1.Left - LeftBuffer;
  if Rect1.Bottom > Screen.Height then
   HeightBuffer := Screen.Height - Rect1.Top - TopBuffer
  else
   HeightBuffer := Rect1.Bottom - Rect1.Top - TopBuffer;

  ScreenDC := GetWindowDC(ActHwnd);
  Bitmap1.Width := WidthBuffer;
  Bitmap1.Height := HeightBuffer;

  try
   GDIFlush;
   BitBlt(Bitmap1.Canvas.Handle,0,0,WidthBuffer,HeightBuffer,
    ScreenDC,LeftBuffer,TopBuffer,SRCCOPY);
  finally
   ReleaseDC(ActHwnd,ScreenDC);
  end;
  Image1.Picture.Bitmap.Assign(Bitmap1);
 finally
  Bitmap1.Free;
 end;
end;