navbuoy |
05-10-2024 15:44:07 |
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;
|