Я хочу иметь возможность определить, на каком мониторе находится курсор. В идеале это было бы динамическое решение для любого количества/конфигурации мониторов.
Я подумал, что будет просто прочитать границы каждого монитора и проверить, находится ли курсор в указанных границах.
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 (сверху, снизу, слева, справа). Красным цветом я показываю реальные размеры дисплея.
Я не знаю, как проверить, на каком мониторе находится мой курсор. Кто-нибудь знает, как я могу исправить свой скрипт? Я использую Windows 10.
SysGet
, не обязательно соответствует настройкам дисплея Windows. - person EJE   schedule 03.04.2019