Определение, на каком мониторе находится курсор, с помощью AutoHotKey.Нижнее значение монитора неверно - PullRequest
2 голосов
/ 03 апреля 2019

Я хочу иметь возможность определить, на каком мониторе находится курсор. В идеале это было бы динамическое решение для любого количества / конфигурации мониторов.

Я подумал, что было бы просто прочитать границы каждого монитора и проверить, находится ли курсор в указанных границах.

CoordMode, Mouse, Screen
GetMonitorMouse()
{
    MouseGetPos, x, y

    SysGet, Mon1, Monitor, 1
    SysGet, Mon2, Monitor, 2
    SysGet, Mon3, Monitor, 3

    if(x >= Mon1Left && x <= Mon1Right && y >= Mon1Bottom && y <= Mon1Top)
    {
        TrayTip,,monitor1, 1, 16
        SetTimer, TurnOffTrayTip, 500
    }
    else if(x >= Mon2Left && x <= Mon2Right && y >= Mon2Bottom && y <= Mon2Top)
    {
        TrayTip,,monitor2, 1, 16
        SetTimer, TurnOffTrayTip, 500
    }
    else if(x >= Mon3Left && x <= Mon3Right && y >= Mon3Bottom && y <= Mon3Top)
    {
        TrayTip,,monitor3, 1, 16
        SetTimer, TurnOffTrayTip, 500
    }
    else
    {
        TrayTip,,monitor unknown %x%-%y%, 1, 16
        SetTimer, TurnOffTrayTip, 500
        SplashTextOn, 400, 300, CursorMonitor, monitor unknown %x%-%y% # %Mon1top% ~ %Mon1Bottom% $ %Mon1Left% ~ %Mon1Right% 
    }

 sleep, 3000
 GetMonitorMouse()

}

GetMonitorMouse()

TurnOffTrayTip:
TrayTip
return

Однако я не понимаю границ, возвращаемых SysGet. Нижняя граница выглядит произвольной. Например, Mon1Bottom - это -8, а Mon2Bottom - 352.

Ниже приведено изображение, показывающее расположение моих трех мониторов в том виде, в каком оно видит Windows. Зелёным я показываю границы, которые возвращает SysGet (сверху, снизу, слева, справа). Красным цветом показаны фактические размеры дисплея.

Monitor Layout

Я не знаю, как проверить, на каком мониторе находится мой курсор. Кто-нибудь знает, как я могу исправить свой скрипт? Я использую Windows 10.

1 Ответ

4 голосов
/ 04 апреля 2019

Похоже, что ваш сценарий в порядке.Основываясь на вышеупомянутых комментариях, вот более точное описание вашей установки.

Monitor Setup

Итак, я думаю, что все сводится к тому, «почемумонитор 2 нижнего края Y-8?Я думаю, что это могло быть случайно размещено таким образом.Чтобы исправить это, я бы попробовал следующее:

  1. переместить монитор 3 в космос;
  2. переместите монитор 2 вверх и в сторону, а затем переместите его прямо над монитором 1 (как это было первоначально задумано);
  3. наконец, переместите монитор 3 так, чтобы его верхний край находился на одной линии с верхним краем монитора 2.

Теперь, когда имена мониторов начинаются с SysGet, они могутили может не совпадать с тем, как это указано в настройках дисплея Windows.Я думаю, что вам просто нужно определить, какой монитор какой тестировать, и приступить к нему.

...