如何在dotnet上以编程方式截取屏幕截图并通过电子邮件发送

时间:2009-07-03 16:36:26

标签: .net .net-2.0 outlook screenshot attachment

背景

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

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

问题:

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

问题:

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

说明:

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

2 个答案:

答案 0 :(得分: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; }

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

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

答案 1 :(得分: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);

要通过outlook发送邮件,您可以使用here

所述的方法