Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана.

Небольшое продолжение к предыдущему посту

http://pikabu.ru/story/avtomatizatsiya_rutinyi_s_autohotkey_...

За прошедший год мое владение скриптами немного улучшилось, в частности, теперь я могу научить скрипт распознавать изображение на экране, искать всякие кнопки, рисунки и т.д.


Давайте попробуем какую-нибудь незатейливую программу, например игрушку сапер.

Научим скрипт реагировать на нашу смерть.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Делаем скриншот, открываем Пэйнт, и выделяем небольшой кусочек желтой рожицы.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Обрезаем и сохраняем в файл smert.png. Можно сохранять и в bmp и в jpg, Autohotkey кушает их всех.

Получился вот такой небольшой файлик:

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Этот кусочек изображения и будет искать скрипт.

Теперь нам нужны координаты области на экране, где скрипт будет производить поиск. Можно, конечно, сказать скрипту сканировать весь экран, но это нерационально и наверняка будет приводить к задержкам в работе.

Запускаем этот скрипт:


^F1::

MouseGetPos, X, Y

Tooltip, %X% %Y%

Clipboard = %X%, %Y%

Sleep 1000

Tooltip

Return


При нажатии ctrl+F1 координаты курсора появятся на экране И скопируются в буфер обмена.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Наша задача: получить координаты вот этой области. А именно - координаты левого верхнего и правого нижнего углов. Подведите кончик курсора к ЛВ углу и нажмите Ctrl F1. Сохраните эти координаты. То же самое с ПН углом. (окно Сапера должно быть активным)

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Теперь создайте следующий скрипт:


F1::

Loop,

{

ImageSearch, xp, yp, 75, 61, 97, 83, *50 smert.png

Sleep 200

If xp > 0

Break

}

MsgBox, Muhaha!

Return


F10::ExitApp

F12::Suspend, Toggle


Если скрипт ничего не находит, то переменным xp, yp присваивается пустое значение, Null.

Если находит, то в них вписываются координаты найденного изображения, срабатывает условие выхода из цикла и запускается следующая часть кода.

*50 отвечает за строгость поиска. *0 максимальная строгость, *255 минимальная.


F10 нужен для аварийного выхода из скрипта если вы вдруг создадите бесконечный скрипт, блокирующий ваши действия.

F12 для временного отключения/включения горячих клавиш.


Итак, расположите smert.png в одной папке со скриптом, запустите сапера, нажмите F1, и каждый 200 миллисекунд скрипт будет искать ваш файлик на экране.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Готово!


Показано, конечно, на пример простой игрушки, но возможности применения поистине безграничны. Автоматизация офисных приложений, игр, промышленность, дизайнерские программы, и т.п. и т.д. на что хватит фантазии.


С уважением, netwizard.

Лига образования

4.3K поста21.8K подписчика

Добавить пост

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:


ДЛЯ АВТОРОВ:


Приветствуются:

-уважение к читателю и открытость

-желание учиться

Не рекомендуются:

-публикация недостоверной информации


ДЛЯ ЧИТАТЕЛЕЙ:


Приветствуются:

-конструктивные дискуссии на тему постов

Не рекомендуются:

-личные оскорбления и провокации

-неподкрепленные фактами утверждения


В этом сообществе мы все союзники - мы все хотим учиться! :)

Вы смотрите срез комментариев. Показать все
26
Автор поста оценил этот комментарий

Смотрю на всё это дело и вспоминаю себя лет эдак 4-5 назад :)
когда в diablo 3 ещё был аукцион, я запилил бота на "горячих клавишах". С 3D у него есть небольшие проблемы для распознования - но это не критично было. суть в том что бот сам за меня бегал на боса и выбивал мне дроп с голдой:)) буквально недавно решил вспомнить старые добрые и запилил на blueStacks ( эмулятор андроида ) автоматизацию игры пианино, не помню как она называется ( в крадце с верха экрана "падают" чёрные прямоугольники имитирующие ноты и на них надо нажимать до того момента пока они не скрылись под экраном, что то на подобие гитархиро) и только тогда я понял как ребята в топе рейтинга там набивают такие огромные количества очков - скорость "падения" нот приближалась к сверхпиксельной и сами ноты практически не видно - чтоб самому нажать и попасть по ним я вообще молчу :D

раскрыть ветку (31)
6
DELETED
Автор поста оценил этот комментарий

А сможете написать скрипт для tap titans что бы он сам кликал и сам прокачивал персов???

Иллюстрация к комментарию
раскрыть ветку (20)
32
Автор поста оценил этот комментарий
- ты доволен? Я пишу скрипт, чтобы завалить косаря!
- заткнись! Заткнись!
раскрыть ветку (2)
1
Автор поста оценил этот комментарий

"заткнись! заткнись!" - это откуда?

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Да вроде ничего сложного. Сейчас посмотрим насколько сложный интерфейс у игры.

раскрыть ветку (6)
DELETED
Автор поста оценил этот комментарий

Большое спасибо)

раскрыть ветку (4)
8
Автор поста оценил этот комментарий

Кажется ничего сложного там нет. Принцип игры такой же как Clicker Heroes, как я понял. Если помощь нужна минут на 5, я помогу так. А написание полноценного автоматизированного скрипта займет хер знает сколько времени. Время уйдет на ознакомление с игрой, механикой, чтением тематических форумов на предмет оптимального маршрута фарминга и т.д.


За это я возьму деньги. Готовы платить?

раскрыть ветку (3)
4
Автор поста оценил этот комментарий

А я клал болт на кнопку бэкспейс в игре Кармагеддон 2, причем настоящий такой тяжеленький, чтобы во время восстанавливаться, когда в тебя врезаются соперники, такой вот механический скрипт)))

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ооо, а я зажал в патрон дрели Леговскую ось с надетым винтом от Лего лодки, прилепил джойстик от PS1 скотчем на стул и так проходил эпизод с пытками в Metal Gear Solid на максимальной сложности, где нужно с неистовой скоростью жать кнопку, чтобы Мэрил осталась жива!

1
DELETED
Автор поста оценил этот комментарий

Не, я расчитывал на халяву, думал если там легкоЮ то так поможете, но спасибо за консультацию)

Автор поста оценил этот комментарий

Сэр у меня к вам деловое предложение если можете дайте ссылку на ваш Вк могу заплатить реальными деньгами

Автор поста оценил этот комментарий

Вот скрипт, который ищет сундуки. Начинает битву с боссом и сразу выходит из нее. Если найдет сундук, делает паузу 25 секунд, затем начинает процесс снова.

раскрыть ветку (9)
DELETED
Автор поста оценил этот комментарий

о, такой классный, для гринда сундуков))

раскрыть ветку (8)
2
Автор поста оценил этот комментарий
Иллюстрация к комментарию
раскрыть ветку (7)
DELETED
Автор поста оценил этот комментарий

Так ты скрипт то дашь?)

раскрыть ветку (6)
3
Автор поста оценил этот комментарий

F1::

Loop,

{

Loop,200

{

Click 812, 158

Sleep 20

}


Loop, 5

{

Click 772, 521

Sleep 20

}


ImageSearch, xp, yp, 477, 627, 521, 672, *50 upgrade.png

If not xp>0

{

SendMode Event

MouseClickDrag, left, 772, 571, 772, 521, 5

SendMode Input

}

}

Return


F12::Reload


Сначала посылает двести кликов на монстра, затем 5 кликов на кнопку апгрейда героя.

После проверяет, видна ли иконка улучшения оружия внизу. Если нет, значит открылся новый герой, тянем полосу героев вверх командой MouseClickDrag.


Естественно, координаты нужно будет подправить.

Выход из цикла F12.

1
Автор поста оценил этот комментарий

Сам на каком максимальном уровне находишься?

раскрыть ветку (4)
1
DELETED
Автор поста оценил этот комментарий

2300, смотрю игра немного зацепила?)

раскрыть ветку (3)
Автор поста оценил этот комментарий

Играл несколько дней подряд. Были проблемные места, hh => kk, kk => pp, покупка последнего героя. Но я сделал упор на прокачку урона, теперь эти места проходятся автоматически, без моего вмешательства.

Последние два дня игра сводилась к следующему: запускаешь скрипт, приходишь через 3 часа, делаешь престиж 60к реликвий, вкладываешь их в Загадочную Ауру, запускаешь скрипт опять. Мне это быстро надоело.

раскрыть ветку (2)
DELETED
Автор поста оценил этот комментарий

А как же турниры?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Там нужно просто дойти до уровня 3199. Если поднимешься выше, то система определит тебя в совсем другую группу, там ад. Там все читеры, победить там нереально. В результате никто не хочет пересекать эту черту, делят первые места с уровнем 3199.


Я уже понял всю механику игры. Качаешь ауру согласно этому оптимальному правилу

https://www.reddit.com/r/TapTitans/comments/4725s4/ua_leveli...

Качаешь артефакты на урон согласно калькулятору yatto.me


Благодаря боту я могу делать престиж 5-6 раз в день. Оптимизировал до предела. Прокачку артефактов тоже оптимизировал. Мне скучно.

Автор поста оценил этот комментарий

На чем писали для diablo 3 ?

раскрыть ветку (1)
Автор поста оценил этот комментарий

AutoHotKey

Автор поста оценил этот комментарий

Dialog56 очень нужно пообщаться, напишите свои контакты на smokymo1986@mail.ru

раскрыть ветку (7)
Автор поста оценил этот комментарий

Это мёртвая ветка. теме 3 + лет. Вы можете писать тут, что вы хотели- всё равно никто не прочитает уже.

раскрыть ветку (6)
Автор поста оценил этот комментарий

Ну, не сказать бы что совсем мертвая. Мне как автору поста приходят все комментарии к нему.

раскрыть ветку (5)
Автор поста оценил этот комментарий

Ну притворись дохликом, жалко что ли :D А вообще, я не доверяю свою почту 1 встречному. Мало ли это окажется представитель близарда, которых захочет меня на бутылку посадить за бота по D3. Оно мне надо? Если работу хочет предложить, то может и тут написать -" Нужен бот по игре крестики-нолики", а я уже дальше думаю и прицениваюсь.

раскрыть ветку (4)
Автор поста оценил этот комментарий

@k800ym61, ответ вам ^

раскрыть ветку (3)
Автор поста оценил этот комментарий

_^

Автор поста оценил этот комментарий
Скажите а будут ещё туториалы?
раскрыть ветку (1)
Автор поста оценил этот комментарий

По данной теме не планируется. По другим темам - да. Но нескоро.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку