你按下截图按钮的时候,其实看到的不是真正的桌面了,是程序把桌面的图片截下来画在一个全屏的窗口上.
我写个小程序给你参考一下。
unit unMainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TScreenCanvas = class(TCanvas)
protected
procedure CreateHandle; override;
public
destructor Destroy; override;
end;
TForm2 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
FBitMap: TBitmap;
FScreenCanvas: TScreenCanvas;
FDrawEnable: Boolean;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
FBitMap := TBitmap.Create;
with FBitMap do
begin
Width := 1024;
Height := 768;
end;
FScreenCanvas := TScreenCanvas.Create;
FBitMap.Canvas.CopyRect(Rect(0,0,1024,768), FScreenCanvas, Rect(0,0,1024,768));
end;
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then
Application.Terminate;
if Key = VK_CONTROL then
begin
Canvas.FillRect(Canvas.ClipRect);
Invalidate;
end;
end;
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FDrawEnable := True;
Randomize;
Canvas.Brush.Color := Random($FFFFFF + 1);
Ellipse(Canvas.Handle, X - 5, Y - 5, X + 5, Y + 5);
end;
procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FDrawEnable then
begin
Ellipse(Canvas.Handle, X - 5, Y - 5, X + 5, Y + 5);
end;
end;
procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FDrawEnable := False;
end;
procedure TForm2.FormPaint(Sender: TObject);
begin
Canvas.Draw(0, 0, FBitMap);
end;
{ TScreenCanvas }
procedure TScreenCanvas.CreateHandle;
begin
inherited;
Handle := GetDC(0);
end;
destructor TScreenCanvas.Destroy;
begin
ReleaseDC(Handle, 0);
inherited;
end;
end.
你改下单元名和窗体的名字就可以用了.
TScreenCanvas是用来获取桌面图像的类.
只要掌握CopyRect函数就没什么问题了,然后记录几个鼠标的点击位置就可以把图给截出来.图片的拉伸移动也是CopyRect函数搞的