是否有任何方法/ API允许调用类似CopyFromScreenAtDepth
我尝试捕获活动窗口下面的GUI预览
然后模糊它以实现类似Aero glass / OS X磨砂玻璃模糊效果
我尝试了很多解决方法
将Form
不透明度设置为0然后捕获并重新设置为1,这会导致我的表单闪烁。
使用相同的透明密钥设置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;
}
答案 0 :(得分:1)
Windows没有CopyFromScreenAtDepth()
方法调用。
您可以做的最好是将Windows Magnification API用于C ++ 使用它有一个 TONs 的缺点,就像没有控制Window的位置和大小,有限的功能,根本没有,在屏幕下面有两个副本,并且能够有其他控件,以及在64位OS下使用32位应用程序时的WOW64问题...
我知道这是一个老问题,但由于这是一个有效的问题,到目前为止没有答案,我认为回答它是公平的。
还有其他类似的问题(也没有答案,可能称为重复......)