VB.NET видит неправильный монитор как имеющий панель задач для вычисления высоты


Когда я запускаю это VB.NET код в моей программе WinForms он отображает ожидаемые результаты, если монитор №1 находится слева, а монитор № 2-справа. (И монитор №1 содержит панель задач Windows.)

Но если пользователь переключил свои мониторы, с монитором №2 слева (содержащим панель задач) и № 1 справа... высота теперь неправильная. Затем мой код (неверно) предполагает, что монитор с панелью задач имеет большее значение высоты.

Есть ли способ исправить это? (Не заставляя 1000 пользователей переключать свои мониторы... или переключите панели задач на другой монитор.)

Или я совершенно не понимаю "WorkingArea ()"????

Dim msg As String = ""

Dim numberOfMonitors As Int16 = Screen.AllScreens.GetUpperBound(0) + 1

If (numberOfMonitors >= 1) Then msg &= "Monitor #1 = " & Screen.AllScreens(0).WorkingArea.Width & " x " & Screen.AllScreens(0).WorkingArea().Height & ".    "
If (numberOfMonitors >= 2) Then msg &= "Monitor #2 = " & Screen.AllScreens(1).WorkingArea.Width & " x " & Screen.AllScreens(1).WorkingArea().Height & ".    "

Call MsgBox(msg)
1 2

1 ответ:

Нет, вы не недопонимаете рабочую зону. Вот определение из MSDN

Рабочая область-это область рабочего стола дисплея, за исключением панелей задач, закрепленных окон и закрепленных панелей инструментов.

WorkingArea вернет всю область экрана, если панель задач Windows настроена на автоматическое скрытие, независимо от того, отображается ли панель задач в данный момент или нет.

Я бы посмотрел на два свойства экрана класса один Primary который возвращает логическое значение, указывающее, является ли экран основным или нет, второй просто использует PrimaryScreen свойство для получения рабочей области основного экрана.

предостережение: у меня нет двойной системы мониторинга, включенной в это время, чтобы проверить, работает ли это.