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.