背景
我正在开发一个业务应用程序,在最后阶段我们遇到了一些额外错误,主要是连接和一些边缘用例。
对于这种例外情况,我们现在提供一个包含错误详细信息的精彩对话框,用户可以截取屏幕截图,并通过电子邮件发送一些评论。
问题:
我想提供更好的体验,并在同一个对话框中提供单个按钮,点击,打开Outlook并准备电子邮件,屏幕截图作为附件,也许是日志文件,然后用户可以添加备注并按下发送按钮。
问题:
如何以编程方式拍摄此屏幕截图,然后将其作为附件添加到Outlook邮件中?
说明:
该应用程序位于Microsoft .Net Framework 2.0,C#或VB
中答案 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;
}
这将返回一个包含主屏幕截图的字节数组。如果您需要处理多个监视器,那么您还需要查看AllScreens的Screen属性。
像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
所述的方法