public static Screen FromRectangle(RectangleF rectangle)
{
Screen foundScreen = null;
float foundArea = 0;
var screens = Screens.ToArray();
foreach (var screen in screens)
{
var rect = rectangle;
rect.Intersect(screen.Bounds);
var area = rect.Size.Width * rect.Size.Height;
if (area > foundArea)
{
foundScreen = screen;
foundArea = area;
}
}
if (foundScreen != null)
return foundScreen;
// find by distance
float foundDistance = float.MaxValue;
foreach (var screen in screens)
{
var diff = RectangleF.Distance(rectangle, screen.Bounds);
var distance = (float)Math.Sqrt(diff.Width * diff.Width + diff.Height * diff.Height);
if (distance < foundDistance)
{
foundScreen = screen;
foundDistance = distance;
}
}
return foundScreen ?? PrimaryScreen;
}
}