2

背景:

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

对于这种异常,我们现在提供了一个带有错误详细信息的漂亮对话框,用户对其进行截图,并通过电子邮件发送并附上一些备注。

问题:

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

问题:

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

评论:

该应用程序采用 Microsoft .Net Framework 2.0、C# 或 VB

4

2 回答 2

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

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

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

于 2009-07-03T16:52:39.777 回答
6

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

//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 发送邮件,您可以使用此处描述的方法

于 2009-07-03T16:57:52.900 回答