实现截取指定窗口图像,代码如下:procedure CaptureScreen(AHandle: THandle; AFileName: string;
AWidth, AHeight: Integer);
const
CAPTUREBLT = $40000000;
var
FScreenHdc: HDC;
FCompatibleHdc: HDC;
FBitmap: TBitmap;
FHBITMAP: HBITMAP;
begin
FScreenHdc := GetWindowDC(AHandle);
try
FCompatibleHdc := CreateCompatibleDC(FScreenHdc);
try
FHBITMAP := CreateCompatibleBitmap(FScreenHdc, AWidth, AHeight);
SelectObject(FCompatibleHdc, FHBITMAP);
FBitmap := TBitmap.Create;
try
FBitmap.Handle := FHBITMAP;
BitBlt(FCompatibleHdc, 0, 0, FBitmap.Width, FBitmap.Height, FScreenHdc,
0, 0, SRCCOPY or CAPTUREBLT);
FBitmap.SaveToFile(AFileName);
finally
FBitmap.Free;
end;
finally
DeleteDC(FCompatibleHdc);
end;
finally
DeleteDC(FScreenHdc);
end;
end;调用方法:
CaptureScreen(hWindow,FName,Width,Height);但截取的时候,如果有其他窗口挡住了指定要截取的窗口,就不能正常截取。请问各位,有什么方法,可以截取到指定的窗口,无论这个窗口最小化或者给别的窗口挡住了!?谢谢了!!
AWidth, AHeight: Integer);
const
CAPTUREBLT = $40000000;
var
FScreenHdc: HDC;
FCompatibleHdc: HDC;
FBitmap: TBitmap;
FHBITMAP: HBITMAP;
begin
FScreenHdc := GetWindowDC(AHandle);
try
FCompatibleHdc := CreateCompatibleDC(FScreenHdc);
try
FHBITMAP := CreateCompatibleBitmap(FScreenHdc, AWidth, AHeight);
SelectObject(FCompatibleHdc, FHBITMAP);
FBitmap := TBitmap.Create;
try
FBitmap.Handle := FHBITMAP;
BitBlt(FCompatibleHdc, 0, 0, FBitmap.Width, FBitmap.Height, FScreenHdc,
0, 0, SRCCOPY or CAPTUREBLT);
FBitmap.SaveToFile(AFileName);
finally
FBitmap.Free;
end;
finally
DeleteDC(FCompatibleHdc);
end;
finally
DeleteDC(FScreenHdc);
end;
end;调用方法:
CaptureScreen(hWindow,FName,Width,Height);但截取的时候,如果有其他窗口挡住了指定要截取的窗口,就不能正常截取。请问各位,有什么方法,可以截取到指定的窗口,无论这个窗口最小化或者给别的窗口挡住了!?谢谢了!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货