Думаю, настав час оновити цю відповідь за допомогою невеликого LINQ, що дозволяє легко отримати весь розмір робочого столу за допомогою одного виразу.
Console.WriteLine(
Screen.AllScreens.Select(screen=>screen.Bounds)
.Aggregate(Rectangle.Union)
.Size
);
Наступна моя оригінальна відповідь:
Я здогадуюсь, що ви хочете приблизно такого:
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);
Майте на увазі, що це не розповідає всієї історії. Можливо, кілька моніторів розташовані в шаховому порядку або розташовані в прямокутній формі. Отже, може бути, що не весь простір між (minx, miny) та (maxx, maxy) видно.
РЕДАГУВАТИ:
Я щойно зрозумів, що код може бути дещо простішим, використовуючи 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);