procedure Capture;
var
TempBitmap : TBitmap;
hHandle : HWND;
begin
TempBitmap := TBitmap.Create;
try
TempBitmap.PixelFormat := pf32bit;
TempBitmap.Width := 100;
TempBitmap.Height := 100;
hHandle := GetWindowDC(GetDeskTopWindow); //윈도우 화면의 핸들을 가져옵니다.
BitBlt(TempBitmap.Canvas.Handle, 0, 0, TempCapture.Width, TempCapture.Height, hHandle, 0, 0, SRCCOPY);
//2~4번째 파라미터 : TempBitmap에 이미지가 복사될 위치와 크기를 정합니다.
//7~8번째 파라미터 : 윈도우 화면에서 복사를 시작할 위치를 정합니다.
//9번째 파라미터 : 복사방식을 정합니다.
//참조 -> https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/nf-wingdi-bitblt
ReleaseDC(0, hHandle);
finally
TempBitmap.Free;
end;
end;
방법2
procedure Capture;
var
c : TCanvas;
r : TRect;
bmp : TBitmap;
begin
bmp := TBitmap.Create;
c := TCanvas.Create;
try
c.Handle := GetWindowDC(GetDesktopWindow);
bmp.PixelFormat := pf32bit;
r := Rect(0, 0, Screen.Width, Screen.Height);
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;
bmp.Canvas.CopyRect(r, c, r);
ReleaseDC(0, c.Handle);
finally
c.Free;
bmp.Free;
end;
end;