怎样将当前Windows桌面“拍成照片”(就像按了"Print Screen"按钮一样)然后保存到内存中的BitMap中???(100分)

  • 主题发起人 主题发起人 ili
  • 开始时间 开始时间
I

ili

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将当前Windows桌面“拍成照片”(就像按了"Print Screen"按钮一样)然后保存到内存中的BitMap中???
我想把当前桌面显示在我的TImage控件里。
急急急!!!
 
//就是截取屏幕嘛
procedure TForm1.FormClick(Sender: TObject);
var winHWND, hCur : integer;
winDC : integer;
rect : TRect;
AFormat : Word;
AData : Cardinal;
APalette : Hpalette;
pt : TPoint;
fBitmap : TBitmap;
begin
hCur := GetCursor(); // 获得光标句柄
GetCursorPos(pt); // 记录光标位置
winHWND := GetDesktopWindow();
winDC := GetDC(winHWND);
GetWindowRect(winHWND, rect);
fBitmap := TBitmap.create;
fBitmap.width := rect.right - rect.left;
fBitmap.height := rect.bottom - rect.top;
BitBlt(fBitmap.canvas.handle, 0, 0, fBitmap.width, fBitmap.height, winDC, 0,
0, SRCCOPY);
DrawIcon(fBitmap.canvas.handle, pt.x, pt.y, hCur); //画光标
ReleaseDC(winHWND, winDC);
fBitmap.SaveToClipBoardFormat(AFormat, AData, APalette); //图像保存到剪贴板中
Clipboard.SetAsHandle(AFormat, AData);
Image1.Picture.Assign(Clipboard); //从剪贴板中读出图像
end;

在Windows2000+D5下运行通过
 
基本上就是这样了:
procedure TForm1.Button1Click(Sender: TObject);
var
dc :HDC;
ScreenCanvas:TCanvas;
MyRect: TRect;
begin
//取桌面句柄
dc := GetDC(0);

ScreenCanvas:=TCanvas.Create;
ScreenCanvas.Handle := dc;

Image1.Picture.Bitmap.Width := Screen.Width;
Image1.Picture.Bitmap.Height:= Screen.Height;
MyRect := Rect(0,0,Screen.Width,Screen.Height);

//取图
Image1.Picture.Bitmap.Canvas.CopyRect(MyRect, ScreenCanvas, MyRect);
//释放资源
ScreenCanvas.Free;
ReleaseDC(NULL,dc);
end;
 
我记得以前有一个控件包中(1st class ,Ahm,Rx中的一个,记不太清)有一个Screen Canvas控件
可以对屏幕进行操作,就象对IMAGE的CANVAS操作一样,你可以去找找...不好意思,没记清楚,不过
这个控件绝对存在,我曾经用过
 
To 杜宝:
在最后一句:ReleaseDC(NULL,dc);
处运行出错:"Project XXX.exe raised exception class EVariantError with message 'Invalid variant type conversion'.Process stopped.Use Step or Run to Continue."

什么意思?
 
啊,错了,改成:
ReleaseDC(0,dc);
 
感谢 杜宝 和 wind2000 两位大哥,程序都成功了:)
 

Similar threads

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