//截屏:var
aBmp:TBitmap;
aJpg:TJpegImage;
aCanvas:TCanvas;
begin
aCanvas := TCanvas.Create;
aCanvas.Handle := GetDC(0);
aBmp := TBitmap.Create;
aBmp.Width := Screen.Width;
aBmp.Height := Screen.Height;
aBmp.Canvas.CopyRect(aBmp.Canvas.ClipRect,aCanvas,aBmp.Canvas.ClipRect);
aCanvas.Free; aJpg := TJpegImage.Create;
aJpg.Assign(aBmp);
aBmp.Free;
aJpg.SaveToFile('c:\test.Jpg');
aJpg.Free;
end;如果改为某个窗口,GetDC的参数改为该窗口的句柄.
可以用FindWindow或SetCapture+WindowFromPoint(由于VCL的TControl类在鼠标事件中对SetCapture和ReleaseCapture进行了调用,SetCapture不太好用,可以改为不使用VCL框架的方法)来得到窗口句柄. ____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
aBmp:TBitmap;
aJpg:TJpegImage;
aCanvas:TCanvas;
begin
aCanvas := TCanvas.Create;
aCanvas.Handle := GetDC(0);
aBmp := TBitmap.Create;
aBmp.Width := Screen.Width;
aBmp.Height := Screen.Height;
aBmp.Canvas.CopyRect(aBmp.Canvas.ClipRect,aCanvas,aBmp.Canvas.ClipRect);
aCanvas.Free; aJpg := TJpegImage.Create;
aJpg.Assign(aBmp);
aBmp.Free;
aJpg.SaveToFile('c:\test.Jpg');
aJpg.Free;
end;如果改为某个窗口,GetDC的参数改为该窗口的句柄.
可以用FindWindow或SetCapture+WindowFromPoint(由于VCL的TControl类在鼠标事件中对SetCapture和ReleaseCapture进行了调用,SetCapture不太好用,可以改为不使用VCL框架的方法)来得到窗口句柄. ____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
但是我发现这类方法如果用语抓取一些启动界面象Photoshop的,就不理想了
因为在显示期间还轮不到我的进程去执行。
如果要实现实时的抓图,可能还要提高进程的优先级,其他方法如上
DC是Device Context ,画图的时候要用到的一个设备上下文,你查GetDC里面有相关的内容。