如何截取应用程序当前显示的图,不采用GetDc的方法(150分)

  • 主题发起人 主题发起人 wuchunhua
  • 开始时间 开始时间
W

wuchunhua

Unregistered / Unconfirmed
GUEST, unregistred user!
如何截取应用程序当前显示的图,不采用GetDc的方法 如果采用getdc的方法,窗体不可见的时候截取不到应用程序的图的,有没有好的办法解决窗体可见和不可见的情况下都能正常截图
 
var
bmp: TBitmap;
begin
bmp := TBitmap.Create;
bmp.Width := Self.ClientWidth;
bmp.Height := Self.ClientHeight;
Self.PaintTo(bmp.Canvas, 0, 0);
bmp.SaveToFile('formpic.bmp');
bmp.Free;
end;
 
楼上的只是自己没调getdc,其实paintto 的时候,还是调用了。只不过是delphi帮你包到这个方法中了。哎。
 
哦,受教了,谢谢。
 
这很难,除非要截取图的程序是你自己写的,用Createwindow重定义过。能够
在NOTvisible下接受wm_paint消息。
以下这段程序可以简单验证.(不包括DX等直接写屏的软件和游戏)

...
uses unit2;
var
hd:Thandle;
{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
application.CreateForm(Tform2,form2);//新建一个form
hd:=form2.Button1.Handle;
form2.Show;
//form2.Visible:=false;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
sendmessage(hd,wm_paint,getdc(self.Handle),0);
//这个消息告诉句柄为hd的控件重画自己到getdc(self.handle)的设备上。
//但是,如果visible为false就不能画。
//透明窗体没实验过,估计可以。
end;
 
后退
顶部