Ver Mensaje Individual
  #2  
Antiguo 05-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Reputación: 2
navbuoy Va por buen camino
he tratado de convertirlo pero no se si estara bien, por si os da la cosa de probarlo en Delphi

Código:
uses
  Windows, SysUtils;

procedure ScreenShot(BmpName: string);
var
  DesktopHwnd: HWND;
  DesktopParams: TRect;
  DevC: HDC;
  Width, Height: DWORD;
  FileSize: DWORD;
  BmpFileData: Pointer;
  BFileHeader: PBITMAPFILEHEADER;
  BInfoHeader: PBITMAPINFOHEADER;
  Image: PRGBTriple;
  CaptureDC: HDC;
  CaptureBitmap: HBITMAP;
  Junk: DWORD;
  FH: THandle;
begin
  DesktopHwnd := GetDesktopWindow();
  DevC := GetDC(DesktopHwnd);
  GetWindowRect(DesktopHwnd, DesktopParams);
  Width := DesktopParams.Right - DesktopParams.Left;
  Height := DesktopParams.Bottom - DesktopParams.Top;

  FileSize := SizeOf(BITMAPFILEHEADER) + SizeOf(BITMAPINFOHEADER) + (SizeOf(RGBTRIPLE) * Width * Height);
  BmpFileData := GlobalAlloc(GPTR, FileSize);

  BFileHeader := PBITMAPFILEHEADER(BmpFileData);
  BInfoHeader := PBITMAPINFOHEADER(Pointer(NativeUInt(BmpFileData) + SizeOf(BITMAPFILEHEADER)));

  BFileHeader.bfType := $4D42; // BM
  BFileHeader.bfSize := FileSize;
  BFileHeader.bfOffBits := SizeOf(BITMAPFILEHEADER) + SizeOf(BITMAPINFOHEADER);

  BInfoHeader.biSize := SizeOf(BITMAPINFOHEADER);
  BInfoHeader.biPlanes := 1;
  BInfoHeader.biBitCount := 24;
  BInfoHeader.biCompression := BI_RGB;
  BInfoHeader.biHeight := Height;
  BInfoHeader.biWidth := Width;

  Image := PRGBTriple(Pointer(NativeUInt(BmpFileData) + SizeOf(BITMAPFILEHEADER) + SizeOf(BITMAPINFOHEADER)));

  CaptureDC := CreateCompatibleDC(DevC);
  CaptureBitmap := CreateCompatibleBitmap(DevC, Width, Height);
  SelectObject(CaptureDC, CaptureBitmap);
  BitBlt(CaptureDC, 0, 0, Width, Height, DevC, 0, 0, SRCCOPY or CAPTUREBLT);
  GetDIBits(CaptureDC, CaptureBitmap, 0, Height, Image^, PBITMAPINFO(BInfoHeader), DIB_RGB_COLORS);

  FH := CreateFile(PChar(BmpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);
  WriteFile(FH, BmpFileData^, FileSize, Junk, nil);
  CloseHandle(FH);

  GlobalFree(BmpFileData);
  DeleteObject(CaptureBitmap);
  DeleteDC(CaptureDC);
  ReleaseDC(DesktopHwnd, DevC);
end;
Responder Con Cita