1
votes

Capture d'écran C # Pleine fenêtre

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?


1 commentaires

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.


3 Réponses :


2
votes

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.


0 commentaires

2
votes

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) {
    }
 }


0 commentaires

0
votes

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;


0 commentaires