procedure CaptureScreen(AFileName: string);
const
CAPTUREBLT = $40000000;
var
hdcScreen: HDC;
hdcCompatible: HDC;
bmp, bmp1: TBitmap;
png: TPNGObject;
hbmScreen: HBITMAP;
begin
hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
hdcCompatible := CreateCompatibleDC(hdcScreen);
hbmScreen := CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES));
SelectObject(hdcCompatible, hbmScreen);
bmp := TBitmap.Create;
bmp1 := TBitmap.Create;
png := TPNGObject.Create;
bmp.Handle := hbmScreen;
BitBlt(hdcCompatible, 0, 0, bmp.Width, bmp.Height, hdcScreen, 0, 0, SRCCOPY or CAPTUREBLT);
bmp1.Assign(bmp);
// bmp.SaveToFile('1');
bmp1.PixelFormat := pf8bit;
png.Assign(bmp1);
png.SaveToFile(AFileName);
bmp1.Free;
bmp.Free;
png.Free;
DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
end;
const
CAPTUREBLT = $40000000;
var
hdcScreen: HDC;
hdcCompatible: HDC;
bmp, bmp1: TBitmap;
png: TPNGObject;
hbmScreen: HBITMAP;
begin
hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
hdcCompatible := CreateCompatibleDC(hdcScreen);
hbmScreen := CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES));
SelectObject(hdcCompatible, hbmScreen);
bmp := TBitmap.Create;
bmp1 := TBitmap.Create;
png := TPNGObject.Create;
bmp.Handle := hbmScreen;
BitBlt(hdcCompatible, 0, 0, bmp.Width, bmp.Height, hdcScreen, 0, 0, SRCCOPY or CAPTUREBLT);
bmp1.Assign(bmp);
// bmp.SaveToFile('1');
bmp1.PixelFormat := pf8bit;
png.Assign(bmp1);
png.SaveToFile(AFileName);
bmp1.Free;
bmp.Free;
png.Free;
DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
end;
解决方案 »
- 关于界面上Tab Order 的问题
- 谁帮我翻译点东西?
- 一个小问题,为何动态生成的窗口不能正常显示,而是疯狂闪烁不止
- 急:在sql 中,group by怎么用????
- MD5算法源码(Delphi及JavaScript版本)
- 如何判斷鼠標在一個可視控件上停留了多長時間?
- 如何来判断grid里是否有内容
- 我的记录中有一个日期字段,如何将这个字段的值设为空值?
- VC的编译器是哪个啊?
- 急,急,急啊。李维的书《delphi5.x ado/MTS/COM+》,第9章的例子。
- delphi 10 生成XML文件时 无法生成 语言信息 encoding
- delphi7 比较两个qrdbtext显示的内容是否相同
procedure CaptureScreen(const AFileName: string);
var
H: THandle;
P: TPNGImage;
begin
H := GetDC(0);
P := TPNGImage.CreateBlank(COLOR_RGB, 8, Screen.Width, Screen.Height);
BitBlt(P.Canvas.Handle, 0, 0, P.Width, P.Height, H, 0, 0, SRCCOPY);
ReleaseDC(0, H);
P.SaveToFile(AFileName);
P.Free;
end;