AHK скрипт,два монитора не понятно
Есть Скрипт,когда использую 1 монитор,работает корректно,но когда подключается ещё один,все ломается и начинает кликать не в тех местах,забивая на все координаты которые я предоставлял,если есть кто понимает,буду благодарен за помощь
#SingleInstance Force
CoordMode, Mouse, Screen
enabled := true
areaSelected := false
reverseX := ""
monitorNumber := 2
offsetX := 900
; ===== Вкл/выкл — Alt+1 =====
!1::
enabled := !enabled
ToolTip % enabled ? "Зеркалирование: ВКЛ" : "Зеркалирование: ВЫКЛ"
Sleep 700
ToolTip
return
; ===== Выбор рабочей области на мониторе (F1) =====
F1::
SysGet, monitorCount, MonitorCount
if (monitorNumber > monitorCount || monitorNumber < 1)
{
MsgBox, Неверный номер монитора! Доступно только %monitorCount% мониторов.
return
}
SysGet, MonLeft, MonitorWorkAreaLeft, %monitorNumber%
SysGet, MonTop, MonitorWorkAreaTop, %monitorNumber%
SysGet, MonRight, MonitorWorkAreaRight, %monitorNumber%
SysGet, MonBottom, MonitorWorkAreaBottom, %monitorNumber%
ToolTip Выберите область (клик+дрэг)
Sleep 300
MouseGetPos, x1, y1
KeyWait, LButton, D
KeyWait, LButton
MouseGetPos, x2, y2
areaX1 := Max(MonLeft, Min(x1, x2))
areaY1 := Max(MonTop, Min(y1, y2))
areaX2 := Min(MonRight, Max(x1, x2))
areaY2 := Min(MonBottom, Max(y1, y2))
areaSelected := true
ToolTip % "Область выбрана:`nX1:" areaX1 " Y1:" areaY1 "`nX2:" areaX2 " Y2:" areaY2
Sleep 1500
ToolTip
return
; ===== Выбор X для реверсного клика (F2) =====
F2::
ToolTip Выберите X для реверсного клика
Sleep 300
MouseGetPos, reverseX, yDummy
ToolTip % "X реверсного клика: " reverseX
Sleep 1500
ToolTip
return
; ===== Левый клик — делаем правый реверс =====
~LButton::
if (!enabled || !areaSelected || reverseX = "")
return
MouseGetPos, x, y
if (x < areaX1 || x > areaX2 || y < areaY1 || y > areaY2)
return
hTarget := DllCall("WindowFromPoint", "int", x, "int", y, "Ptr")
if (!hTarget)
hTarget := WinExist("MetaScalp ahk_exe MetaScalp.exe") ; Если окно не определено, ищем MetaScalp
if (hTarget)
{
; Переводим координаты в клиентскую область окна
VarSetCapacity(pt, 8, 0)
NumPut(x, pt, 0, "Int")
NumPut(y, pt, 4, "Int")
DllCall("ScreenToClient", "Ptr", hTarget, "Ptr", &pt)
clientX := NumGet(pt, 0, "Int")
clientY := NumGet(pt, 4, "Int")
targetX := reverseX
targetY := y
VarSetCapacity(pt2, 8, 0)
NumPut(targetX, pt2, 0, "Int")
NumPut(targetY, pt2, 4, "Int")
DllCall("ScreenToClient", "Ptr", hTarget, "Ptr", &pt2)
newClientX := NumGet(pt2, 0, "Int")
newClientY := NumGet(pt2, 4, "Int")
ControlClick, x%newClientX% y%newClientY%, ahk_id %hTarget%, , Right, 1, NA
Sleep 100
}
return
; ===== Правый клик — делаем левый реверс =====
~RButton::
if (!enabled || !areaSelected || reverseX = "")
return
MouseGetPos, x, y
if (x < areaX1 || x > areaX2 || y < areaY1 || y > areaY2)
return
hTarget := DllCall("WindowFromPoint", "int", x, "int", y, "Ptr")
if (!hTarget)
hTarget := WinExist("MetaScalp ahk_exe MetaScalp.exe") ; Если окно не определено, ищем MetaScalp
if (hTarget)
{
VarSetCapacity(pt, 8, 0)
NumPut(x, pt, 0, "Int")
NumPut(y, pt, 4, "Int")
DllCall("ScreenToClient", "Ptr", hTarget, "Ptr", &pt)
clientX := NumGet(pt, 0, "Int")
clientY := NumGet(pt, 4, "Int")
targetX := reverseX
targetY := y
VarSetCapacity(pt2, 8, 0)
NumPut(targetX, pt2, 0, "Int")
NumPut(targetY, pt2, 4, "Int")
DllCall("ScreenToClient", "Ptr", hTarget, "Ptr", &pt2)
newClientX := NumGet(pt2, 0, "Int")
newClientY := NumGet(pt2, 4, "Int")
ControlClick, x%newClientX% y%newClientY%, ahk_id %hTarget%, , Left, 1, NA
Sleep 100
}
return