有没有办法打开一个无声/不可见的新表单并截图



现在我自动打开一个新表单,加载一个图表,只在RAM中制作一个屏幕截图,并将其发送到我的私人聊天电报中。到目前为止一切都很好,但有没有办法,无声地打开表单(也没有显示,也没有聚焦/看不见(并截图无声表单?

这是atm我的代码,运行良好,但没有静默功能。有人能帮我吗?

_f2 = new Form2();
_f2.Show();
while(true)
{
if(Form2Closed == true)
{
Form2Closed = false;
break;
}
await Task.Delay(1000);
}
// loading chart stuff
var frm = Form2.ActiveForm;
using (MemoryStream stream = new MemoryStream())
{
using (var bmp = new Bitmap(frm.Width, frm.Height))
{
frm.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save(stream, ImageFormat.Png);// "screenshot.png");
stream.Seek(0, SeekOrigin.Begin);
bmp.Dispose();
// sending stuff
}
}

您可以通过将窗体的Opacity属性设置为0:来使窗体不可见

var frm = new Form2();
frm.ShowInTaskbar = false;
frm.Opacity = 0;
frm.Show();
using (var bmp = new Bitmap(frm.Width, frm.Height))
{
frm.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
// Do something with the bitmap.
}

DrawToBitmap方法即使在表单被隐藏的情况下也应该可以正常工作。

请注意,如果在显示表单后立即将Visible属性设置为false(例如,通过调用frm.Hide();(,也会起作用,但这会导致表单出现一瞬间。在调用Show()之前将Opacity设置为0可确保表单从一开始就不可见。或者,您可以覆盖SetVisibleCore,如下所述。

检查此线程:如何拍摄WPF控件的屏幕截图?

RenderTargetBitmap.Render应使用最小化窗口:(。

最新更新