如何将屏幕抓下来并存成文件类似Print Screen按键但用程序实现(50分)

  • 主题发起人 主题发起人 LSS
  • 开始时间 开始时间
procedure savescreen(filename: string);
var
bmp: TBitmap;
r: TRect;
dc: HDC;
begin
getwindowrect(getdesktopwindow, r);
bmp := tbitmap.create;
bmp.width := r.right - r.left;
bmp.height := r.bottom - r.top;
dc := getdc(getdesktopwindow);
bitblt(bmp.canvas.handle, 0, 0, bmp.width, bmp.height, dc, r.left, r.top, SRCCOPY);
releasedc(getdesktopwindow, dc);
bmp.savetofile(filename);
bmp.free;
end;
 
唉,晚了一步
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitmap* bmp = new Graphics::TBitmap();
TRect r(0,0,320,320);//设定相对当前窗口的裁剪矩形大小
TRect r2;
HDC dc;
AnsiString filename = "c://temp//2.bmp";

GetWindowRect(Handle,&r2);
bmp->Width = r.Right - r.Left;
bmp->Height = r.Bottom - r.Top;
dc = GetDC(GetDesktopWindow());
r.Left += r2.Left;
r.Top += r2.Top;

BitBlt(bmp->Canvas->Handle, 0, 0, bmp->Width, bmp->Height, dc, r.Left, r.Top, SRCCOPY);
ReleaseDC(GetDesktopWindow(), dc);
bmp->SaveToFile(filename);
delete bmp;

}
//---------------------------------------------------------------------------
 
我来解释一下吧,呵呵
procedure savescreen(filename: string);
var
bmp: TBitmap;
r: TRect;
dc: HDC;
begin
getwindowrect(getdesktopwindow, r); //把桌面取下来区域
bmp := tbitmap.create; //创建,设置其大小
bmp.width := r.right - r.left;
bmp.height := r.bottom - r.top;
dc := getdc(getdesktopwindow); //这是关键步骤,取得桌面的DC。
bitblt(bmp.canvas.handle, 0, 0, bmp.width, bmp.height, dc, r.left, r.top, SRCCOPY);//当然也关键,把桌面DC的内容复制到自己BMP的画布上。
releasedc(getdesktopwindow, dc); //释放DC资源
bmp.savetofile(filename); //保存
bmp.free; //释放
end;

BCB代码几乎一样,呵呵。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
609
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部