Ver Mensaje Individual
  #2  
Antiguo 28-11-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita