[.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")

Publié dans la catégorie .NET Framework.
Tags : , . TrackBack URL.

3 Comments

  1. Zéphyrin dit :

    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.

  2. Bonjour Zéphyrin,

    La capture d’écran ne fonctionne pas dans les services Windows.

    Cordialement

  3. kermed dit :

    Bonjour,
    Je confirme que cela ne marche pas dans un service windows.

Leave a comment