J'essaie d'écrire une application console à l'aide de .NET Framework. Je veux faire une capture d'écran de mon écran. J'ai utilisé d'autres réponses sur SO comme ceci:
https://stackoverflow.com/a/24879511/9457997
Le problème est que cela ne capture pas tout mon écran. Il manque environ 1/5 en bas et sur le côté droit.
Comment puis-je capturer tout mon écran en utilisant C # .NET Framework?
3 Réponses :
Vous pouvez utiliser Screen.PrimaryScreen.Bounds;
pour obtenir les limites de votre écran.
Rectangle bounds = Screen.PrimaryScreen.Bounds; using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) using (Graphics g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size); bitmap.Save("C://test.jpg", ImageFormat.Jpeg); }
Vous devrez référencer System.Drawing ,
System.Drawing.Imaging
et System.Windows.Forms
pour que cet exemple de code fonctionne dans une application console.
Utilisez VirtualScreen :
int screenLeft = SystemInformation.VirtualScreen.Left; int screenTop = SystemInformation.VirtualScreen.Top; int screenWidth = SystemInformation.VirtualScreen.Width; int screenHeight = SystemInformation.VirtualScreen.Height; // Create a bitmap of the appropriate size to receive the full-screen screenshot. using (Bitmap bitmap = new Bitmap(screenWidth, screenHeight)) { // Draw the screenshot into our bitmap. using (Graphics g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(screenLeft, screenTop, 0, 0, bitmap.Size); } //Save the screenshot as a Jpg image var uniqueFileName = "C:\\temp\\a.Jpg"; try { bitmap.Save(uniqueFileName, ImageFormat.Jpeg); } catch (Exception ex) { } }
Je n'ai malheureusement pas trouvé de moyen de faire une capture d'écran à partir d'une application console, mais voici ma façon de faire une capture d'écran et de laisser l'utilisateur choisir où enregistrer la photo en utilisant SaveFileDialog
.
Pour le code suivant, vous aurez besoin de ces trois références:
Bitmap bt = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graphics.FromImage(bt); g.CopyFromScreen(0, 0, 0, 0, bt.Size); SaveFileDialog sfd = new SaveFileDialog(); sfd.ShowDialog(); string name = sfd.FileName + ".jpg"; bt.Save(name, ImageFormat.Jpeg);
Vous pouvez attacher ce code à un bouton ou à un événement:
using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;
Si l'écran sur lequel vous essayez de prendre une photo est mis à l'échelle et que votre application n'est pas DPIAware, vous recevrez des mesures virtualisées (mises à l'échelle à une valeur DPI prédéfinie). Tout d'abord, essayez de définir la sensibilité DPI de votre application sur au moins System Aware. Voir ici: Comment configurer une application pour qu'elle s'exécute correctement sur une machine avec un paramètre DPI élevé comment activer < / i> il. Cliquez ici pour plus de détails sur les fonctions API spécialisées.