C#我可以截取活动窗口下面的所有内容的截图

时间:2015-05-16 08:57:30

标签: c# image z-index blur

是否有任何方法/ API允许调用类似CopyFromScreenAtDepth

的内容

我尝试捕获活动窗口下面的GUI预览

然后模糊它以实现类似Aero glass / OS X磨砂玻璃模糊效果

我尝试了很多解决方法

  1. Form不透明度设置为0然后捕获并重新设置为1,这会导致我的表单闪烁。

  2. 使用相同的透明密钥设置Form后台Blue,这将在第一时间工作,但GUI不会更新,所以如果我拨打this.Update()它将会更新GUI,但也会导致闪烁。

  3. 我的代码:

    private void MyForm_Load(object sender, EventArgs e) {
        Timer timer1 = new Timer();
        timer1.Tick += new EventHandler(UpdateBackground);
        timer1.Interval = 100; // in miliseconds
        timer1.Start();
    }
    
    private void UpdateBackground(object sender, EventArgs e)
    {
        this.BackgroundImage = null;
        Bitmap myImage = new Bitmap(this.Width, this.Height);
        using (Graphics g = Graphics.FromImage(myImage))
        {
            this.Update();
            g.CopyFromScreen(new Point(this.Location.X, this.Location.Y), Point.Empty, new Size(this.Width, this.Height)); 
        }
        ImageTools.FastBlur(myImage, 4);
        this.BackgroundImage = myImage;
    }
    

1 个答案:

答案 0 :(得分:1)

Windows没有CopyFromScreenAtDepth()方法调用。

您可以做的最好是将Windows Magnification API用于C ++ 使用它有一个 TONs 的缺点,就像没有控制Window的位置和大小,有限的功能,根本没有,在屏幕下面有两个副本,并且能够有其他控件,以及在64位OS下使用32位应用程序时的WOW64问题...

我知道这是一个老问题,但由于这是一个有效的问题,到目前为止没有答案,我认为回答它是公平的。
还有其他类似的问题(也没有答案,可能称为重复......)