这几天想截取整个屏幕,所以上网学习了一下,主要是TCanvas类中CopyRect的使用,还有就是如何取得整个屏幕的DC和画布。其实也很简单,几行代码的事,代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure SnapScreen; //截取整个屏幕 end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin Self.WindowState := wsMinimized; //把自己最小化 Self.Hide; //隐藏自己 Sleep(1000); //停一秒,等程序最小化完毕 SnapScreen; //调用写好的截取屏幕过程 end; procedure TForm1.SnapScreen; var bmpScreen : TBitmap; ScreenCanvas : TCanvas; ScrDC : HDC; begin bmpScreen := TBitmap.Create; ScreenCanvas := TCanvas.Create; try {把TBitmap的宽与高设为与屏幕一样大小} bmpScreen.Width := Screen.Width; bmpScreen.Height := Screen.Height; {GetWindowDC的用法:取整个屏幕的DC,参数不是字母o,是数字0,MSDN说参数是null时是取整个屏幕的DC,用nil作参数时编译不通过,后来在Delphi的Windows.pas中看到HWND是longWord类型,是不是0就表示null呢(这数据类型的对应关系真头大),试试吧。没想到真的是。} ScrDC := GetWindowDC(0); ScreenCanvas.Handle := scrDC; //把画布的句柄指向取到的DC {CopyRect用法说明: 第一个参数是目标矩形的位置和大小,也就是把源矩形复制到TBitmap的画布的哪个位置 第二个参数是源画布,也就是要从哪个画布复制图形, 第三个参数是源矩形的位置和大小,也就是复制源画布的哪个位置 因为这里是要复制整个屏幕,所以目标矩形和源矩形的大小都是整个屏幕的大小} bmpScreen.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height) ,ScreenCanvas,Rect(0,0,Screen.Width,Screen.Height)); ReleaseDC(0,ScrDC); //用完了DC要记得释放 bmpScreen.SaveToFile('d:/a.bmp'); //把TBitmap保存成BMP图形 finally bmpScreen.Free; ScreenCanvas.Free; end; end; end.