Ver Mensaje Individual
  #7  
Antiguo 01-12-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 me di cuenta que usabas Lazarus. Te paso el código que he compilado en Lazarus pero probado con un solo monitor, no dispongo de configuración con dos minitores:
Código Delphi [-]
uses   Windows, ....;  
function EnumDisplayMonitors(dc: HDC; lprcClip: PRECT; lpfnEnum: pointer; dwData: LPARAM): boolean; stdcall; external 'User32.dll' name 'EnumDisplayMonitors';  

implementation   
{$R *.lfm}    

function MonitorEnumProc(hMonitor: THANDLE; hdcMonitor: HDC; var lprcMonitor: RECT; 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, nil, @MonitorEnumProc, 0); 
  ReleaseDC(0, VirtualScreenDC); 
end;     

{ TForm1 }  

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  CaptureMonitors; 
end;

Espero que te sirva de ayuda.

Saludos.

Última edición por escafandra fecha: 01-12-2013 a las 19:56:47.
Responder Con Cita