How to take a screenshot and send by email programaticly on dotnet

白昼怎懂夜的黑 提交于 2019-12-18 18:07:43

问题


Background:

I'm developing a bussiness application, and in the final stages we are encountering some extrange errors, mostly with connection and some edge use cases.

For this kind of exceptions, we now provide a nice dialog with error details, of which the user take a screenshot, and send by email with some remarks.

Problem:

I would like to provide a better experience, and provide a single button in the same dialog, wich uppon click, would open outlook and prepare the email, with a screenshot as attachment and maybe a log file, then the user can add remarks and press the send button.

Question:

How can I take this screenshot programaticly, and then add it as attachment in a outlook mail?

Remarks:

The app is in Microsoft .Net Framework 2.0, C# or VB


回答1:


First of all, to send the screenshot, you can use the following code:

//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);

To send the mail through outlook, you could use the method described here




回答2:


The following code will perform the screenshot bit of your question:

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

This will return a byte array containing the screenshot of the main screen. If you need to deal with multiple monitors, then you need to also look at the AllScreens property of Screen.

Libraries like this one can handle all of your unhandled exceptions, take screenshots and email them, and much more, but they will most likely try to send the screenshot themselves instead of attaching it to a new Outlook email.



来源:https://stackoverflow.com/questions/1080069/how-to-take-a-screenshot-and-send-by-email-programaticly-on-dotnet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!