C# 我可以截取活动下方的所有内容 window
C# Can I take screenshot of everything below active window
是否有任何方法/API 允许调用 CopyFromScreenAtDepth
我尝试在活动状态下捕获 GUI 的预览 window
然后对其进行模糊处理以实现类似于 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;
}
Windows 没有这样的 CopyFromScreenAtDepth()
方法调用。
您最好的办法是使用 Windows Magnification API for C++。
使用它有 TONs 的缺点,比如无法控制 Window 的位置和大小,功能有限,根本 none,同时拥有两个副本窗体下方的屏幕和能够有其他控件,以及在 64 位 OS...
下使用 32 位应用程序和 API 时的 WOW64 问题
我知道这是一个老问题,但由于这是一个有效的问题,到目前为止还没有答案,我认为回答它是公平的。
还有其他类似的问题(也没有答案,可能被称为重复...)
是否有任何方法/API 允许调用 CopyFromScreenAtDepth
我尝试在活动状态下捕获 GUI 的预览 window
然后对其进行模糊处理以实现类似于 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;
}
Windows 没有这样的 CopyFromScreenAtDepth()
方法调用。
您最好的办法是使用 Windows Magnification API for C++。
使用它有 TONs 的缺点,比如无法控制 Window 的位置和大小,功能有限,根本 none,同时拥有两个副本窗体下方的屏幕和能够有其他控件,以及在 64 位 OS...
我知道这是一个老问题,但由于这是一个有效的问题,到目前为止还没有答案,我认为回答它是公平的。
还有其他类似的问题(也没有答案,可能被称为重复...)