2009-07-03 7 views
2

Contexte:Comment prendre une capture d'écran et de l'envoyer par email programaticly sur dotnet

Je développe une application bussiness, et dans les dernières étapes que nous rencontrons quelques erreurs de extrange, la plupart du temps avec une connexion et une utilisation de bord cas.

Pour ce genre d'exceptions, nous fournissons maintenant une belle boîte de dialogue avec les détails de l'erreur, dont l'utilisateur prend une capture d'écran, et envoie par email avec quelques remarques.

Problème:

Je voudrais fournir une meilleure expérience, et de fournir un seul bouton dans la même boîte de dialogue, Wich uppon cliquez, ouvrirait des perspectives et préparer l'e-mail, avec une capture d'écran en pièce jointe et peut-être un fichier journal, l'utilisateur peut ajouter des remarques et appuyer sur le bouton Envoyer.

Question:

Comment puis-je prendre cette capture d'écran programaticly, puis ajoutez comme pièce jointe dans un message de perspectives?

Remarques:

L'application est dans Microsoft .Net Framework 2.0, C# ou VB

Répondre

5

Tout d'abord, d'envoyer la capture d'écran, vous pouvez utiliser le code suivant:

//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); 

Pour envoyer le courrier via Outlook, vous pouvez utiliser la méthode décrite here

+0

alors que ce n'est pas le plus propre code, vous m'a indiqué la bonne piste ici. Cet article n'était pas très utile par lui-même, mais grâce à cela, j'ai trouvé cet autre article dans msis http://is.gd/1myNS expliquant comment prendre la capture d'écran enregistrée et l'ajouter en pièce jointe. –

6

Le code suivant effectuera le bit capture d'écran de votre question:

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

Cette volonté retourne un tableau d'octets contenant la capture d'écran de l'écran principal. Si vous devez gérer plusieurs moniteurs, vous devez également consulter la propriété AllScreens de Screen. Les bibliothèques comme this peuvent gérer toutes vos exceptions non gérées, prendre des captures d'écran et les envoyer par e-mail, et bien plus encore, mais elles essaieront probablement d'envoyer la capture d'écran elles-mêmes au lieu de la joindre à un nouveau courrier Outlook.

Questions connexes