在C#中捕获屏幕但不是当前形式?

时间:2012-04-05 08:29:24

标签: c# screen-capture

我想捕捉屏幕,但没有当前表格,我试图最小化 - >捕获 - >最大化,但我正在寻找一个更好的解决方案,如果存在。这是我的代码::

    int w = this.Width;
    int h = this.Height;
    Size sz = this.Size;
    Point loc = this.Location;

    this.WindowState = FormWindowState.Minimized;

    System.Threading.Thread.Sleep(500);

    using (Bitmap b = new Bitmap(w, h))
    {
        using (Graphics g = Graphics.FromImage(b))
        {
            g.CopyFromScreen(loc, new Point(0, 0), sz);
        }

        b.Save(Environment.CurrentDirectory + "\\slides\\screen.jpeg");

        this.BackgroundImage = System.Drawing.Image.FromFile(@"slides\screen.jpeg");
    }

    this.WindowState = FormWindowState.Maximized;

我问是否有直接的方法将捕获的图像作为表单背景,而不保存它。

2 个答案:

答案 0 :(得分:4)

  1. 将表单Opacity设置为0。

    这将使表格完全透明,因此不可见。

  2. 使表单不可见。将Visible属性设置为“false。”

    这会隐藏表单而不会改变它的状态,但在XP上这不会让窗口立即消失。

答案 1 :(得分:1)

尝试,虽然我确实注意到你和我的两个都被形式边界略微抵消了。

    int w = this.Width; 
    int h = this.Height; 
    Size sz = this.Size; 
    Point loc = this.Location; 
    Hide();
    System.Threading.Thread.Sleep(500);
    using (Image b = new Bitmap(w, h)) 
    { using (Graphics g = Graphics.FromImage(b)) 
    { 
        g.CopyFromScreen(loc, new Point(0, 0), sz); }

        Image x = new Bitmap(b);
        this.BackgroundImage = x;
    } 
    Show();