Ich denke, es ist Zeit, diese Antwort mit einem kleinen LINQ auf den neuesten Stand zu bringen, was es einfach macht, die gesamte Desktopgröße mit einem einzigen Ausdruck zu erhalten.
Console.WriteLine(
Screen.AllScreens.Select(screen=>screen.Bounds)
.Aggregate(Rectangle.Union)
.Size
);
Meine ursprüngliche Antwort lautet:
Ich denke, was Sie wollen, ist ungefähr so:
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);
Denken Sie daran, dass dies nicht die ganze Geschichte erzählt. Es ist möglich, dass mehrere Monitore versetzt oder nicht rechteckig angeordnet sind. Daher kann es sein, dass nicht der gesamte Raum zwischen (minx, miny) und (maxx, maxy) sichtbar ist.
BEARBEITEN:
Ich habe gerade festgestellt, dass der Code mit etwas einfacher sein könnte 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);