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.