如何拍摄截图并通过电子邮件发送到dotnet上

Dav*_*Lay 2 .net outlook screenshot attachment .net-2.0

背景:

我正在开发一个业务应用程序,在最后阶段我们遇到一些额外的错误,主要是连接和一些边缘用例.

对于这种异常,我们现在提供一个包含错误详细信息的精彩对话框,用户可以截取屏幕截图,并通过电子邮件发送一些评论.

问题:

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

题:

如何以编程方式截取此屏幕截图,然后将其作为附件添加到Outlook邮件中?

备注:

该应用程序位于Microsoft .Net Framework 2.0,C#或VB中

adr*_*nks 6

以下代码将执行您的问题的屏幕截图:

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; }
Run Code Online (Sandbox Code Playgroud)

这将返回包含主屏幕截​​图的字节数组.如果您需要处理多个监视器,那么您还需要查看ScreenAllScreens属性.

这样的库可以处理所有未处理的异常,截取屏幕截图和发送电子邮件等等,但他们很可能会尝试自己发送屏幕截图,而不是将其附加到新的Outlook电子邮件中.


dut*_*boy 5

首先,要发送屏幕截图,您可以使用以下代码:

//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);
Run Code Online (Sandbox Code Playgroud)

要通过outlook发送邮件,您可以使用此处描述的方法