Как пересчитать координаты точки внутри окна, когда высота влияет на координату X? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть точка внутри игры, которую я хочу щелкнуть (x: 360, y: 101, с разрешением 800x600), изменение ширины окна не влияет на координаты этой точки, однако изменение высоты делает. Чем больше высота, тем больше координата X этой точки смещается вправо. Координата Y также изменяется, но медленнее, этого недостаточно, чтобы я пропустил щелчок, но также была бы полезна помощь для его расчета.

Код не имеет значения, но вот он

WinGetPos, ,,width,height,A
newX := ???            // Need help here
newY := height * 0.168 // Bad, but works
MouseMove, newX, newY
Click

Некоторая дополнительная информация, это игра Path of Exile. Это позволяет сделать ширину настолько большой, насколько вы хотите, что позволяет видеть дальше. Понижение высоты при сохранении той же ширины также позволяет видеть дальше, но не позволяет опускать ее ниже 600.

Изображение для справки (800x600)

Изображение для справки (1437x714)

1 Ответ

0 голосов
/ 30 августа 2018

Местоположение вашей цели зависит от двух факторов: (1) границы вашего окна и (2) вертикального разрешения. Если мы сфокусируемся только на клиентской области (то есть на окне, исключающем ее границу и заголовок) и поместим начало координат нашей системы координат в верхний левый угол этой области, то позиция, которую вы хотите щелкнуть с разрешением 800x600, будет (356, 78) , Мы можем напрямую масштабировать эту точку по отношению высоты фактического разрешения и, наконец, добавить границы и заголовок. Следовательно, окончательная формула будет:

newX = borderLeft + 356 * verticalResolution / 600
newY = borderTop + titleBarHeight + 78 * verticalResolution / 600

Интересно, что границы на ваших двух скриншотах разные. Снимок 800x600 имеет левую границу 4px, тогда как у другого 1px. Я предполагаю, что это из-за скриншота и предполагаю левую границу 4px. Верхняя граница и высота заголовка равны 23 пикселя.

Следовательно, у вас есть:

newX = 4 + 356 * verticalResolution / 600
newY = 23 + 78 * verticalResolution / 600

, которая дает вам местоположение (428, 116) на скриншоте 1437x714, которое выглядит правильно, за исключением разницы в 3px из-за левой границы.

...