No puedo probar con mas de un monitor, pero se me ocurre que enumeres los monitores y captures sus imágenes. Mas o menos sería de esta forma:
Código Delphi
[-]
function MonitorEnumProc(hMonitor: THANDLE; hdcMonitor: HDC; var lprcMonitor: TRECT; dwData: LPARAM): boolean; stdcall;
{$J+}
const
n: integer = 0;
var
W, H: integer;
DC: HDC;
bmp, oldbmp: HBITMAP;
Bitmap: TBitmap;
begin
W:= lprcMonitor.Right - lprcMonitor.Left;
H:= lprcMonitor.Bottom - lprcMonitor.Top;
DC:= CreateCompatibleDC(0);
bmp:= CreateCompatibleBitmap(hdcMonitor, W, H);
oldbmp:= SelectObject(DC, bmp);
BitBlt(DC, 0, 0, W, H, hdcMonitor, lprcMonitor.Left, lprcMonitor.Top, SRCCOPY + $40000000);
SelectObject(DC, oldbmp);
DeleteObject(DC);
Bitmap:= TBitmap.Create;
Bitmap.Handle:= bmp;
Bitmap.SaveToFile(Format('panta%d.bmp', [n]));
inc(n);
Bitmap.Free;
Result:= true;
{$J-}
end;
procedure CaptureMonitors;
var
VirtualScreenDC: HDC;
begin
VirtualScreenDC:= GetDC(0);
EnumDisplayMonitors(VirtualScreenDC, 0, @MonitorEnumProc, 0);
ReleaseDC(0, VirtualScreenDC);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CaptureMonitors;
end;
Saludos.