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

捕获屏幕,但不是C#中的当前形式?,c#,screen-capture,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.S

我想捕获屏幕,但在没有当前表单的情况下,我尝试最小化->捕获->最大化,但如果存在,我正在寻找更好的解决方案。这是我的密码::

    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;
我问是否有一种直接的方法可以将捕获的图像作为背景,而不保存它

  • 将窗体设置为0

    这将使窗体完全透明,因此不可见

  • 使窗体不可见。将属性设置为'false'

    这将在不改变窗体状态的情况下隐藏窗体,尽管在XP上这不会使窗口立即消失

  • 将窗体设置为0

    这将使窗体完全透明,因此不可见

  • 使窗体不可见。将属性设置为'false'

    这将在不改变窗体状态的情况下隐藏窗体,尽管在XP上这不会使窗口立即消失


  • 试试看,尽管我注意到你的和我的都被表单边框略微偏移了

        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();
    

    试试看,尽管我注意到你的和我的都被表单边框略微偏移了

        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();
    

    只要在设计器中将窗体的不透明度设置为99,就不必隐藏它。不是一个功能,它是一个bug。@Hans这就是我正在做的,我很高兴(不透明度没关系,我已经解决了。与Win 7 PC上启用Aero有关;故事的寓意:截图时禁用Aero(Aero=无用功能)只要在designer中将表单的不透明度设置为99,你就不必隐藏它。这不是一个功能,而是一个bug。@Hans这就是我所做的,我很满意(不透明度没关系,我已经解决了。这与Win 7 PC上启用Aero有关;故事的寓意:截屏时禁用Aero(Aero=无用功能)只需将其设置为99,这样它就不会不可见:)将Visible设置为false实际上不起作用,您仍然可以在XP上看到它。直到所有其他重叠的窗口都完成绘制。只需将其设置为99,这样它就不会不可见:)将Visible设置为false实际上不起作用,您仍然可以在XP上看到它。直到所有其他重叠的窗户都画上了它们的画。你应该记录为什么500是一个特殊的数字。它比314好吗?我相信他用500来确保有足够的时间来进行一次模拟,因为我没有试过,得到了表格,100显示它变暗了。你应该记录为什么500是一个特殊的数字。它比314好吗?我相信他用500来确保有足够的时间来进行一场比赛,因为我没有试过,得到了表格,100显示它变暗了。。