[.NET] Réaliser une capture d’écran de tout le bureau Windows

Une question qui revient fréquemment dans les forums Microsoft : « Comment réaliser une capture d’écran de tout le bureau Windows ?« .

Voici le code d’une méthode static CapturerBureauWindows() permettant de réaliser une capture de tout le bureau Windows en utilisant du code managé uniquement. Ce code fonctionne avec le .NET Framework 2.0 (et donc avec les versions supérieures).

public static Bitmap CapturerBureauWindows()
{
  Rectangle tailleTotale; // Taille totale du bureau de Windows
  Bitmap image;           // Capture de l'écran

  // Récupérer la taille totale du bureau de Windows
  tailleTotale = Screen.AllScreens[0].Bounds;
  for (int i = 1; i < Screen.AllScreens.Length; i++)
  {
     tailleTotale = Rectangle.Union(tailleTotale, Screen.AllScreens[i].Bounds);
  }

  // Créer une image de la taille du bureau de Windows
  image = new Bitmap(tailleTotale.Width, tailleTotale.Height);

  // Créer un Graphics à partir de l'image et faire la capture dans celui-ci
  using (Graphics g = Graphics.FromImage(image))
  {
    g.CopyFromScreen(tailleTotale.Location, Point.Empty, tailleTotale.Size);
  }

  return image;
}
Public Shared Function CapturerBureauWindows() As Bitmap
  Dim tailleTotale As Rectangle
  ' Taille totale du bureau de Windows
  Dim image As Bitmap
  ' Capture de l'écran
  ' Récupérer la taille totale du bureau de Windows
  tailleTotale = Screen.AllScreens(0).Bounds
  For i As Integer = 1 To Screen.AllScreens.Length - 1
    tailleTotale = Rectangle.Union(tailleTotale, Screen.AllScreens(i).Bounds)
  Next

  ' Créer une image de la taille du bureau de Windows
  image = New Bitmap(tailleTotale.Width, tailleTotale.Height)

  ' Créer un Graphics à partir de l'image et faire la capture dans celui-ci
  Using g As Graphics = Graphics.FromImage(image)
    g.CopyFromScreen(tailleTotale.Location, Point.Empty, tailleTotale.Size)
  End Using

  Return image
End Function

Une fois l’objet Bitmap obtenu, il est possible de dessiner la capture dans une surface GDI+ ou de l’enregistrer dans un fichier. Le code suivant illustre l’utilisation de la méthode Save() de l’objet Bitmap :

Bitmap capture;

capture = CapturerBureauWindows();
capture.Save(@"C:\...\MaCapture.jpg");

Dim capture As Bitmap

capture = CapturerBureauWindows()
capture.Save("C:\...\MaCapture.jpg")

3 réflexions au sujet de « [.NET] Réaliser une capture d’écran de tout le bureau Windows »

  1. Bonjour,
    Merci pour cet article.
    ça marche bien… mais quand j’essaye de l’implémenter sous forme de service windows, cela ne marche pas…
    Une suggestion pour une implémentation de la capture d’écran sous forme de service windows ?

    Merci bien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.