//截屏: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 /
          \_/

解决方案 »

  1.   

    楼上的方法对于一般的进程来说可以使用,
    但是我发现这类方法如果用语抓取一些启动界面象Photoshop的,就不理想了
    因为在显示期间还轮不到我的进程去执行。
    如果要实现实时的抓图,可能还要提高进程的优先级,其他方法如上
      

  2.   

    只要你会用DC那就很简单使用GetDC(handle)来得到指定窗口的HDC或者用GetDC(0)得到桌面的HDC然后想如何都可以了!
      

  3.   

    要实现时实抓图,应该做一个线程去作。最好再创建一个多媒体计时器,让它定时触发一个Event,而你的线程一直循环等待这个Event,等到后就截屏。
      

  4.   

    用FindWindow函数查找所有窗口,然后找到窗口handle--> DC
      

  5.   

    请问 Larky(睡仙) dc是什么意思?我应该如何查找有关信息?在请问plainsong(轻风) 你说的多媒体计时器是不是timer?
      

  6.   

    多媒体定时器比timer要准确的多,timer最快一般不超过55毫秒,而且非常不准确,多媒体定时器要好的多,你在msdn查看timeSetEvent就知道理。
    DC是Device Context ,画图的时候要用到的一个设备上下文,你查GetDC里面有相关的内容。