Viruzober, окно не полноэкранное, значит координаты надо отсчитывать от верхнего левого угла не самого окна, а его клиентской области.
Иначе координаты будут менятся при смене системных тем, толщины обрамления окон, масштабирования.
hWnd := WinExist("A")
myWinPos := WinGetP(hWnd)
WinGetTitle titl, ahk_id %hWnd%
MsgBox % titl "`n" myWinPos.x " " myWinPos.y " " myWinPos.w " " myWinPos.h "`n"
. myWinPos.Client.x " " myWinPos.Client.y " " myWinPos.Client.w " " myWinPos.Client.h "`n"
. myWinPos.Client2Win.x " " myWinPos.Client2Win.y " " myWinPos.Client2Win.w " " myWinPos.Client2Win.h
WinGetP(hwnd) {
WinGetPos, x, y, w, h, ahk_id %hWnd%
WinP := {x:x, y:y, w:w, h:h}
VarSetCapacity(pt, 16)
NumPut(x, pt, 0) || NumPut(y, pt, 4) || NumPut(w, pt, 8) || NumPut(h, pt, 12)
if (!DllCall("GetClientRect", "uint", hwnd, "uint", &pt))
Return
if (!DllCall("ClientToScreen", "uint", hwnd, "uint", &pt))
Return
x := NumGet(pt, 0, "int"), y := NumGet(pt, 4, "int")
w := NumGet(pt, 8, "int"), h := NumGet(pt, 12, "int")
Client := {x:x, y:y, w:w, h:h}
Client2Win := {x:x-WinP.x, y:y-WinP.y, w:w, h:h}
Return WinP := {x:WinP.x, y:WinP.y, w:WinP.w, h:WinP.h, Client2Win:Client2Win, Client:Client}
}