背景:
我正在开发一个应用程序经营业务,并在最后阶段,我们遇到了一些交流中心的错误,主要是与连接和一些边缘使用情况。
对于这种异常,我们现在提供错误的详细信息,其中用户采取截图,并通过电子邮件与一些言论发送一个很好的对话。
问题:
我想提供更好的体验,并在同一个对话框提供一个按钮,至极uppon单击,会打开Outlook,并准备电子邮件,用截屏作为附件,也许一个日志文件,然后用户可以添加备注,按发送按钮。
题:
我怎么能借此截图programaticly,然后将其添加为一个Outlook邮件附件?
备注:
该应用程序是Microsoft .NET框架2.0,C#或VB
首先,发送截图,你可以使用下面的代码:
//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发送邮件,你可以使用所描述的方法在这里
下面的代码将执行你的问题的截图位:
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财产屏幕 。
像图书馆这样一个可以处理所有未处理的异常,采取截图,并给他们发电子邮件,等等,但他们很可能会试图发送截图本身,而不是将其连接到一个新的Outlook电子邮件。