Skip to content

Como realizar captura de pantallas

Delphi ScreenShot

Realizar capturas de pantalla desde Delphi es mucho más fácil de lo que crees. Es una importante función en nuestros sistemas que muchos de nuestros clientes nos piden.

Siempre hablando de VCL, desde Delphi tenemos todas las funciones de la WinAPI a disposición.

Veamos el Siguiente Código:

Uses 
  Winapi.Windows;

procedure TFMain.Screenshot;
var
  screenBmp: TBitmap;
  screenHDC: HDC;
begin
  try
    screenHDC := GetWindowDC(GetDesktopWindow);

    screenBmp := TBitmap.Create;
    screenBmp.PixelFormat := pf24bit;
    screenBmp.Height := Screen.Height;
    screenBmp.Width := Screen.Width;

    BitBlt(screenBmp.Canvas.Handle, 0, 0, screenBmp.Width, screenBmp.Height, screenHDC, 0, 0, SRCCOPY);
  except
    on E: Exception do
      ShowMessage('ERROR: Screenshot - ' + E.ClassName + ' - ' + E.Message);
  end;

  { Procesar imagen }

end;

Capturar pantalla desde Delphi

La explicación del código de la función Screenshot es muy simple.

En primer lugar declaramos dos variables:

screenBmp: TBitmap;
screenHDC: HDC;

En screenBMP, de tipo TBitmap, guardaremos la captura para que luego la proceses como desees.

En screenHDC guardaremos el contexto del dispositivo de origen (Desktop).

Para capturar el contexto del dispositivo de origen, utilizaremos la función GetWindowDC(GetDesktopWindow), también desde la API de Windows (Unidad Winapi.Windows).

Las cuatro lineas siguientes es la creación del componente de tipo TBitmap y el formateo a formato pf24bit y con un ancho y alto al igual que nuestro Desktop.

Y por último, la función que realiza la captura es BitBlt. La misma realiza la transferencia del bloque de Bits correspondientes a un rectángulo de pixeles desde el contexto del dispositivo origen (Desktop) a un dispositivo destino, en nuestro caso el objeto screenBMP.