用WPF做了一个桌面软件,它能够根据一个请求生成一张图,然后点击按钮保存当前软件截屏(其实就是想要生成的那张图)。实际上我们的请求很多,想做成一个自动化的。可以接收若干个请求,最后的效果是批量针对每个请求都生成一张截图。如果这个程序能在后台中运行(无UI界面)则更好,所以想请教大牛,这个后台运行的无UI却能截图的功能如何实现?

解决方案 »

  1.   


    const uint KEYEVENTF_EXTENDEDKEY = 0x1;
    const uint KEYEVENTF_KEYUP = 0x2;
    const byte VK_SNAPSHOT = 0x2C;
    Native.keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
    Native.keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);IDataObject iObj = Clipboard.GetDataObject();
    if (iObj.GetDataPresent(DataFormats.Bitmap, true))
    {
        Bitmap bmpScreen = iObj.GetData(DataFormats.Bitmap, true) as Bitmap;
        Bitmap bmpOutput = new Bitmap((int)this.Rect.Width, (int)this.Rect.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        Graphics g = Graphics.FromImage(bmpOutput);
        Rectangle destRectangle = new Rectangle(0, 0, (int)this.Rect.Width, (int)this.Rect.Height);
        g.DrawImage(bmpScreen,destRectangle,  (int)this.Rect.X, (int)this.Rect.Y, (int)this.Rect.Width, (int)this.Rect.Height, GraphicsUnit.Pixel);
        bmpOutput.Save(sPath, System.Drawing.Imaging.ImageFormat.Bmp);
    }
      

  2.   

    楼主试过WPF中的VisualBrush了吗?
    要显示的内容隐藏用Opacity=0,不显示的用Visibility=Hidden。
      

  3.   

    PrintScreen这个方法,在电脑索屏或者软件最小化的时候,就不好用了.而且PrintScreen还会有一个截取界面中某一部分的问题,这个截取也有点麻烦.不过我已经找到了更好的解决方法,谢谢了