我可以截图活动窗口下面的所有东西吗?

本文关键字:活动 窗口 我可以 | 更新日期: 2023-09-27 17:49:17

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

我尝试在活动窗口

下面捕获GUI的预览

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

我已经尝试了很多方法

  1. 设置Form不透明度为0,然后捕获并设置回1,这导致我的窗体闪烁

  2. 使Form背景Blue具有相同的透明键,这将在第一次工作,但GUI不会更新,所以如果我调用this.Update(),它将更新GUI,但也会导致闪烁。

我代码:

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;
}

我可以截图活动窗口下面的所有东西吗?

Windows没有这样的CopyFromScreenAtDepth()方法调用。

你能做的最好的就是使用c++的Windows放大率API。
使用它有一个的缺点,如无法控制窗口的位置和大小,有限的功能,根本没有,在有屏幕下面的形式的副本和能够有其他控制,和WOW64问题时使用32位应用程序与64位操作系统下的API…

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