Clickermann: анализ экрана

Работа с экраном Clickermann — анализируем цвет пикселей

Одной из новых возможностей программы является возможность работы с экраном. Начиная с версии 3.1 Clickermann может «видеть» то, что происходит на экране. Эта возможность позволяет организовать довольно «умные» сценарии. Если раньше программа могла стать руками пользователя, то теперь она может в некоторой степени быть и глазами.

SCREENSHOT — снимок экрана
Это просто. Для снятия скриншота экрана используется простая инструкция SCREENSHOT. При этом скриншот в формате bmp помещается в подпапку screens папки программы. Всего в этой папке может находиться 9999 файлов, поэтому регулярно чистите папку.

GETSCREEN — взятие снимка экрана
Несмотря на сходство в описании, эта инструкция помещает снимок экрана не на жесткий диск, а в память программы. Эта вспомогательная функция, она используется в совокупности с другими функции.

IF_PIXEL(X,Y, ЦВЕТ) — анализ точки на экране
И вот он глаз. Правда, глаз немного подслеповатый, он видит всего одну точку на снимке. И если точка [X,Y] имеет указанный цвет, то инструкции между IF_PIXEL и END_IF выполняются. Так же имеется отрицательный анализ IF_NOT_PIXEL.

IF_PIXEL_IN(X1,Y1, X2,Y2, ЦВЕТ) — поиск точки на экране
А это второй глаз. Эта инструкция была создана для тех случаев, когда координаты нужного пикселя заранее неизвестны (объект двигается например). Она производит поиск в заданной области первого попавшегося пикселя нужного цвета и вызывает свое тело. При этом, координаты этого пикселя помещаются в системные переменные $_return1 (для Х) и $_return2 (для У). Оперируя этими переменными вы без труда получите ту точку, которую искали.
Инструкция просматривает прямоугольную область экрана, которая задается параметрами. Верхняя левая точка мнимого прямоугольника задается через X1,Y1. Правая нижняя соответственно через X2,Y2.
Важно знать что это очень ресурсоемкая функция, которая существенно задерживает сценарий. К примеру на сканирование всего экрана 1024х768 уходит порядка 6 секунд. Разумеется чем меньше область поиска, тем быстрее отрабатывает эта инструкция.

Цвет
Цвет задается строковой константой в шестнадцатеричном виде. То есть #0000FF соответствует синему цвету.
Непосредственно значение цвета для точки можно узнать в редакторе сценария. Он показывает значение цвета для точки под курсором.

О значении GETSCREEN
Что важно, перед использованием инструкций анализа должен быть сделан снимок экрана при помощи инструкции GETSCREEN. Таким образом инструкции анализируют не текущее состояние экрана, а состояние, полученное через последний GETSCREEN.
Все дело в том, что сам по себе снимок экрана весьма ресурсоемкий. У меня есть сценарий, в котором последовательно идут пятнадцать IF_PIXEL. Если при каждом будет браться новый снимок экрана, программа будет существенно «тормозить». Поэтому целесообразнее один раз (за цикл) снять экран и потом анализировать его сколько угодно раз.
Однако стоить учитывать, что если сценарий большой и содержит временные задержки, то текущее состояние экрана может отличаться от состояния, которое было получено через GETSCREEN неск. секунд назад.
Пример программы анализа пикселей для кликера

GETSCREEN

IF_PIXEL(10,20, #F23A41)
LCLICK(10,20)
END_IF

IF_PIXEL(20,20, #F23A41)
LCLICK(20,20)
END_IF

Этот фрагмент сценария делает снимок экрана, анализирует его в двух точках, и если они соответствуют цвету #F23A41, с эти точки осуществляется клик.

Источник: ithelp.at.ua