如何采取截图,并通过电子邮件发送programaticly上DOTNET(How to take a

2019-06-24 22:51发布

背景:

我正在开发一个应用程序经营业务,并在最后阶段,我们遇到了一些交流中心的错误,主要是与连接和一些边缘使用情况。

对于这种异常,我们现在提供错误的详细信息,其中用户采取截图,并通过电子邮件与一些言论发送一个很好的对话。

问题:

我想提供更好的体验,并在同一个对话框提供一个按钮,至极uppon单击,会打开Outlook,并准备电子邮件,用截屏作为附件,也许一个日志文件,然后用户可以添加备注,按发送按钮。

题:

我怎么能借此截图programaticly,然后将其添加为一个Outlook邮件附件?

备注:

该应用程序是Microsoft .NET框架2.0,C#或VB

Answer 1:

首先,发送截图,你可以使用下面的代码:

//Will contain screenshot
Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
Graphics screenshotGraphics = Graphics.FromImage(bmpScreenshot);
//Make the screenshot
screenshotGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
screenshot.save("a place to temporarily save the file", ImageFormat.Png);

通过Outlook发送邮件,你可以使用所描述的方法在这里



Answer 2:

下面的代码将执行你的问题的截图位:

public byte[] TakeScreenshot()
{
    byte[] bytes;
    Rectangle bounds = Screen.PrimaryScreen.Bounds;
using (Bitmap bmp = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb)) { using (Graphics gfx = Graphics.FromImage(bmp)) { gfx.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy);
using (MemoryStream ms = new MemoryStream()) { bmp.Save(ms, ImageFormat.Jpeg); bytes = ms.ToArray(); } } }
return bytes; }

这将返回一个包含主画面的屏幕快照的字节数组。 如果您需要处理多个显示器,那么你还需要看看AllScreens财产屏幕 。

像图书馆这样一个可以处理所有未处理的异常,采取截图,并给他们发电子邮件,等等,但他们很可能会试图发送截图本身,而不是将其连接到一个新的Outlook电子邮件。



文章来源: How to take a screenshot and send by email programaticly on dotnet