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

后端 未结 2 1820
栀梦
栀梦 2021-01-03 15:19

Background:

I\'m developing a bussiness application, and in the final stages we are encountering some extrange errors, mostly with connection and so

相关标签:
2条回答
  • 2021-01-03 16:12

    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

    0 讨论(0)
  • 2021-01-03 16:13

    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.

    0 讨论(0)
提交回复
热议问题