Je pense qu'il est temps d'actualiser cette réponse avec un peu de LINQ, qui permet d'obtenir facilement la taille totale du bureau avec une seule expression.
Console.WriteLine(
Screen.AllScreens.Select(screen=>screen.Bounds)
.Aggregate(Rectangle.Union)
.Size
);
Ma réponse initiale suit :
Je pense que ce que vous voulez, c'est quelque chose comme ça :
int minx, miny, maxx, maxy;
minx = miny = int.MaxValue;
maxx = maxy = int.MinValue;
foreach(Screen screen in Screen.AllScreens){
var bounds = screen.Bounds;
minx = Math.Min(minx, bounds.X);
miny = Math.Min(miny, bounds.Y);
maxx = Math.Max(maxx, bounds.Right);
maxy = Math.Max(maxy, bounds.Bottom);
}
Console.WriteLine("(width, height) = ({0}, {1})", maxx - minx, maxy - miny);
Gardez à l'esprit que ces données ne sont pas exhaustives. Il est possible que plusieurs moniteurs soient décalés ou disposés de manière non rectangulaire. Il se peut donc que tout l'espace entre (minx, miny) et (maxx, maxy) ne soit pas visible.
EDIT :
Je viens de réaliser que le code pourrait être un peu plus simple en utilisant Rectangle.Union
:
Rectangle rect = new Rectangle(int.MaxValue, int.MaxValue, int.MinValue, int.MinValue);
foreach(Screen screen in Screen.AllScreens)
rect = Rectangle.Union(rect, screen.Bounds);
Console.WriteLine("(width, height) = ({0}, {1})", rect.Width, rect.Height);
2 votes
Peut-être que la "taille complète du bureau" dépendra de la façon dont les écrans sont positionnés. Je ne sais pas trop comment calculer cela, mais vous pouvez toujours récupérer le nombre d'écrans et la résolution de chaque écran avec System.Windows.Forms.Screen.AllScreens.