Иногда нужно отследить относительные координаты для какого-либо окна или рабочего окна заданного скрипта и цвет в той точке. Или измерять смещения относительно какой-либо особой точки окна. Особенно это актуально для браузерных игрушек.
Данный скрипт позволяет это сделать.
Кроме того, можно получить информацию о рабочем окне другого скрипта:
- хендл
- координаты левого верхнего угла
- размеры окна (W - ширина, H - высота)
- заголовок окна
Если отслеживаете данные какого-либо ДРУГОГО работающего скрипта, то в
отслеживаемом скрипте после точки привязки к рабочему окну обязательно должна быть строка:
Код
set #myworkwindow workwindow
В данном скрипте придется отредактировать номер отслеживаемого скрипта в строке
set #sn
0 // !!! изменить, если отслеживаем координаты курсора и цвет для ДРУГОГО указанного скрипта
Если задать #sn < 0 (как в примере), то вам будет предложено выбрать интересующее окно мышкой на экране и задать точку нулевого отсчёта. Я так обычно и делаю.
Если просто хотите скриптом получить интересующую информацию на экране, то в скрипте ничего менять не надо.Для остановки отслеживания нужно остановить выполнение данного скрипта в пилоте.
Скрипт измерения координат и смещений
Код
// Скрипт отслеживания координат и цвета v1.6 (c) Zeleax
set #sn -1 // !!! отслеживаем координаты курсора и цвет для указанного скрипта
// если указанный номер < 0, то предлагается выбрать рабочее окно вручную
gosub showcoord
end_script
// Отображает текущие относительные и абсолютные кординаты курсора для другого скрипта
// заданного по номеру. а также цвет ДЛЯ РАБОЧЕГО ОКНА в текущей позиции мыши
// В отслеживаемом скрипте после привязки к окну обязательно должна быть строка:
// set #myworkwindow workwindow
:showcoord
set linedelay 1
if #sn < 0 // or #myworkwindow.#sn = "" // забыли привязаться к другому скрипту, или другой скрипт не работает
msg Укажите рабочее окно: поместите мышку над ним. У вас есть 5 секунд после нажатия кнопки OK.
wait 5s
set #w windowfromcursor
alarm
if #w <= 0
msg Не могу найти рабочее окно! Повторите попытку
goto showcoord
else
set workwindow #w
end_if
else
set workwindow #myworkwindow.#sn // задали рабочее окно
end_if
:start1
set #b prompt(Отслеживание Мышка_0 Клавиатура_0 Инфо_окна)
if ( #b = 1 ) or ( #b = 0 )
set #mode 1
else
set #mode 2
end_if
if #b = 2 // указание точки отсчета на экране
msg Наведите мышку на точку нулевого отсчета в окне (без клика). У вас 5 секунд после нажатия кнопки OK.
wait 5s
end_if
if #b = 3 // ввод кординат точки отсчета вручную
set $x 0
set $y 0
set $x prompt (Введите_X0)
set $y prompt (Введите_Y0)
set #x0 $x
set #y0 $y
wait 500
move #x0 #y0
end_if
if #b = 4 // Инфо окна
set $wtitle getwindowtext (workwindow)
get windowpos workwindow #x #y #width #height
msg Хендл: workwindow . Xabs= #x, Yabs= #y, W= #width, H= #height . Заголовок: $wtitle
goto start1 // окно выбора вариантов
end_if
if #mode = 2 // относительные смещения
get mouse_pos #x0 #y0
alarm
end_if
while 1 = 1 // бесконечный цикл
get mouse_pos #x #y
get mouse_pos #xa #ya abs
get color #color #x #y // сохраняем цвет в переменной
if #xa < 350 and #ya < 150
set #hy 200
else
set #hy 0
end_if
if #mode = 1
hint (12 255 0 #hy -1 -1 ( #x, #y / #xa, #ya abs - цвет #color ))
else
set #dx #x - #x0 // считаем смещение относительно нулевой точки
set #dy #y - #y0
hint (12 255 0 #hy -1 -1 ( #x, #y / #xa, #ya abs - цвет #color /n (dx, dy) = #dx, #dy ))
end_if
wait 100
end_while // бесконечный цикл
return
Сообщение отредактировал Zeleax - 18.9.2012, 17:36