网上已经有很多关于抓屏的代码,主要代码如下:
bitblt(image1.canvas.handle,0,0,image1.width,image1.height,getdc(0),0,0,srccopy);在一般情况下,能正常获取当前的屏幕的图像。问题是,在win2000中,当屏幕被锁定的时候,或者是出现屏保的时候,此时抓的图就是一片"白色"。很是奇怪。问如何解决这个问题。是GetDC(0)的问题吗?
还有没有其他的获取设备的方案?

解决方案 »

  1.   

    在NT下,其实有三个桌面:
    1。Winlogon桌面,用于用户登录操作;
    2。屏幕保护桌面
    3。系统桌面,就是我们常用的桌面
    你GetDC(0)只能获得当前桌面,所有要用SwitchDesktop等API来打开其它桌面
      

  2.   

    请具体些!如果我想得到“Winlogon桌面”,“屏幕保护桌面”,应该如何修改代码。而且如何判断系统处于那个状态,是通过抓屏后的图判断,还是有更好的方法。我想写一个通用的抓屏程序。
      

  3.   

    关注,我也是同样的问题。
    还有
    bitblt(image1.canvas.handle,0,0,image1.width,image1.height,getdc(0),0,0,srccopy);

    Canvas.CopyRect(Rect(0, 0, screen.Width, screen.Height), FCanvas, Rect(0, 0, screen.Width, screen.Height));
    抓屏时速度都很慢,并且当连续抓取时CPU使用率几乎达到100%
      

  4.   

    屏保绝对可以抓~~~当然这种抓图方式如果是DirectDraw直接写屏的屏保当然没办法,只能是GDI写屏的才行GetDC后要记得要用ReleaseDC释放DC任何程序这样连续执行都将消耗光资源,这和抓屏无关