Автоматизация рутины с 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.4K постов21.8K подписчик

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

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

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


ДЛЯ АВТОРОВ:


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

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

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

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

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


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


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

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

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

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

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


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

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

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

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

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


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

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

До первой капчи =)

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

Капча намекает, что добиваться девушки лучше цветами и шоколадками, а не лайками.

Иллюстрация к комментарию
3
Автор поста оценил этот комментарий
Просто хочу завоевать сердце одной прекрасной дамы, но все времени нет. Скрипт бы помог.
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Для лайка всех постов скриншотишь сердечко, обрезаешь, сохраняешь.

Находишь координаты области, где обычно располагаются сердечки.

У мена получилось так:


F6::

Loop,

{

Loop, 3

{

ImageSearch, xp, yp, 573, 124, 640, 761, *50 heart.png

If xp > 0

Click %xp% %yp%

Sleep 200

}

Send {PgDn}

Sleep 1000

}

Return


F10::ExitApp


Скрипт пытается кликнуть до трех сердечек на экране, затем проматывает вниз, кликает еще и т.д.


Это для лайка постов.

Иллюстрация к комментарию
Предпросмотр
показать ответы
1
Автор поста оценил этот комментарий

зачем?

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

затем

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

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

раскрыть ветку (1)
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)
3
Автор поста оценил этот комментарий

1. https://autohotkey.com/docs/commands/FileAppend.htm

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

F1::FileAppend 123456, file.txt


Этот скрипт создал у меня на рабочем столе file.txt с текстом 123456 внутри.


2. Я бы хранил координаты в двух переменных. Если есть способ хранить их в одной, прошу поделиться.


3. Считывание данных из файла с помощью

https://autohotkey.com/docs/commands/FileRead.htm

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

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

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

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

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

>И по нажатиям клавиш - в свернутые окна команды отправлялись.

А как этого добиться в AH?

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

SetControlDelay, -1

ControlClick, x800 y400, Clicker Heroes


посылает клик в координаты 800-400 в окно с заголовком Clicker Heroes.

Окно может быть неактивно, но должно быть развернуто, по-моему.

SetControlDelay нужен чтоб команда не глючила.

https://autohotkey.com/docs/commands/ControlClick.htm



ControlSend ,,{Home}, Clicker Heroes

посылает клавишу Home в окно Clicker Heroes даже если оно свернуто или неактивно.

https://autohotkey.com/docs/commands/ControlSend.htm

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

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

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

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


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

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

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


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

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

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

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

а не проще такую фигню сделать с помощью того же Clickermann? там и поменьше строк будет для такой незатейливой задачи.

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

Я лишь делюсь своим опытом. Я не ставлю задачу "отыскать наиболее простой для новичка путь и объяснить его".

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

3
Автор поста оценил этот комментарий
Просто хочу завоевать сердце одной прекрасной дамы, но все времени нет. Скрипт бы помог.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Лайкать фотки можно руками. Стрелка вправо, клик мышкой. Очень быстро.

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

А можно как-то по клику на правую кнопку мыши (или колесо) замедлять скорость курсора?

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

F1::

DllCall("SystemParametersInfo", UInt, 0x71, UInt, 0, UInt, 3, UInt, 0)

KeyWait F1 ; This prevents keyboard auto-repeat from doing the DllCall repeatedly.

return


F1 up::DllCall("SystemParametersInfo", UInt, 0x71, UInt, 0, UInt, 10, UInt, 0)


Взято отсюда

https://autohotkey.com/board/topic/5296-set-the-mouse-speeds...


При нажатии F1 замедляет мышь, при отжатии возвращает в исходное состояние.

Соответственно, для клика колеса заменить F1 на MButton, правая кнопка мыши RButton.

показать ответы
Автор поста оценил этот комментарий
А что будет если окошко с сапером перенести в другую область экрана?
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

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

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

Научи его учить себя за тебя играть.

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

Я знаю кто сможет вам помочь.

Иллюстрация к комментарию
показать ответы
5
Автор поста оценил этот комментарий

@moderator, нельзя ли перенести этот пост в Лигу Образования? Не могу сделать это при помощи редактирования.

показать ответы
3
Автор поста оценил этот комментарий
Подписался. Кстати у тебя 1 год, 1 месяц 1 день и все такое. Когда-нибудь твои посты пригодятся мне, но не сегодня
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Спасибо!

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

Доброе время суток.  Хочу себе сделать скрипт который будет распознавать изображение на экране ровно по центру, который будет срабатывать с задержкой 0.5 секунд.  Если совпадает, нажимает кнопку пусть будет X, если не находит не нажимает.

  У вас есть что то то подобное?  Увы моих познаний мало чтобы сделать скрипт с нуля.

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

В статье приведены подробные шаги. Увы, я не могу дать вам готовое решение - не будет работать. Вы должны проделать все своими руками, так как работоспособность скрипта нужно проверять на каждом шагу. Сначала создать хоткей и научить его выводить сообщение на экран

F1:: MsgBox, 1

Потом научить его распознавать образец изображения

F1::

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

If xp > 0

MsgBox, 1

Return


Потом вместо msgbox сделать

Sleep 500

Send X

Автор поста оценил этот комментарий
Спасибо пост очень помог, подскажи как сделать что б определенные значения на экране проверялись тип если у меня в сумме больше 45, макрос прекращался, буду благодарен если не сложно ответить на пару вопросов.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Что конкретно в сумме больше 45? Что на экране происходит?

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

В общем хочу сделать ротацию скилов, когда у скила кд то его иконка становиться  темноватой и через ImageSearch устанавливается уровень ошибки то-есть если у скила  в данный момент нет кд то errorlevel = 0 и выполняется действие Send (1) а если иконка темная то алгоритм дальше идет через else к следующему ImgeSearch. Проблема в том что у меня никак не находиться изображение

Вот код

#SingleInstance Force

#NoEnv

SetWorkingDir, D:\DADADADA

SendMode Input

CoordMode Pixel


$NumPad2::

Loop

{

ImageSearch, FoundX, FoundY, 458, 913, 491, 948, *20 Fire.bmp

if ErrorLevel = 0

{


Send 1

Sleep 50

}

else

{

MsgBox not found

ImageSearch FoundX, FoundY, 470, 913, 505, 1012, *20 1stskill.bmp

if errorLevel = 0

{

Send 2

Sleep 50

}

}

Sleep 100

return

}

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

1. Тестировали в других приложениях? В том же сапере, например?

2. Выньте из своего кода проблемный участок и потестите его отдельно. Допустим,


F8::

ImageSearch FoundX, FoundY, 470, 913, 505, 1012, *20 1stskill.bmp

if errorLevel = 0

tooltip, ok!

Return


Так вы поймете где проблема, из-за того что imagesearch не находит картинку или в другой части кода.

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

Допер !

в таком случае цикл не нужен.


F1::

Loop,

{

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

Sleep 200

If xp > 0

Break

}

MsgBox, Muhaha!

Return

Else

MsgBox, WellDone...


F10::ExitApp

F12::Suspend, Toggle


Так ведь ?

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

Return зря убрал. Это оператор, завершающий горячую клавишу.

F1::

;какой-то код

Return


F2::

;еще код

Return


F12::Suspend, Toggle нужно для временного отключения горячих клавиш, мало ли. Зря убрал.


Else
MsgBox, WellDone...
Return
F12::Suspend, Toggle

Если после горячей клавиши идет всего одна строка кода, то Return не нужен.

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

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

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

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

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

Проще искать по наличию черного пикселя на уголке рта рожицы по заданной координате, зачем такие сложности со скриншотом.

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

Это пример. Чтобы пользователи научились идее поиска скриншота. Цель не выполнить задачу максимально простым путем, цель наглядно показать, как пользоваться инструментом.

Автор поста оценил этот комментарий
Кто посоветует нормальную прогу для создания горячих клавиш на определенные действия, вроде увеличения звука или запуск браузера? Что бы работало всегда, независимо от активного приложения.
Мультимедийных клавиш нету на клавиатуре
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

F1::Send {Volume_Down}

F2::Send {Volume_Up}

F4::Send {Browser_Home}


При нажатии соответствующих клавиш регулируется звук и запускается браузер.

Полный список мультимедийных клавиш тут

https://autohotkey.com/docs/KeyList.htm

в разделе мультимедиа.


Клавишей вызова можно назначить любую другую клавишу, например {Tab}, {Backspace}, либо буквенные клавиши, но к ним лучше обращаться по их виртуальному коду, читайте первую часть этой статьи.

Также можно использовать сочетания клавиш.


Я использую

^!Right::Send {Volume_Up}

^!Left::Send {Volume_Down}


это Ctrl Alt стрелка влево и вправо.

1
Автор поста оценил этот комментарий
Боже мой, зачем делать такое убожество? Намного проще заюзать детектор Виолы-Джонса. Он и работает быстро, и в данном конкретном случае понадобится немного данных для тренировки.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Если я буду разрабатывать какие-нибудь требовательные к ресурсам приложения и мне понадобятся более быстрые решения, я обращусь к детектору Виолы-Джонса, спасибо.

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

@netwizard, ты живой? вопрос есть по AHK ??

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

Захожу на пикабу гораздо реже уже. Спрашивайте.

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

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

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

А можно написать скрипт, который будет видеть кнопки на экране и если левая, нажимает быстро левую, правую - то правую и так без перерывов и быстро?
https://imgur.com/a/LaVrgFX

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

Можно. Следуйте инструкциям из поста.

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

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

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

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

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

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

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

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

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

Есть у кого АХК или тот кто может написать. Чтоб при расширении 1280 * 720 в координатах: Ширина от 900 до 1045. А ПО ВЫСОТЕ от 650 до 1210. И при нахождении в этих координатах картинки нажималась клавиша. Допустим вот в игре появляется картинка с английской буквой H ( КАРТИНКИ НАХОДЯТСЯ В ПАПКЕ ) и он сразу же нажимает это букву на клавиатуре автоматически. Затем после этой буквы сразу же появляется в заданных координатах английская C и он так же моментально нажимает на это букву. Далее появляется картинка ЛКМ так же в заданных координатах и он сразу же так же нажимает Левую Кнопку Маши

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

Попробуй самостоятельно написать хоть пару строчек кода, с результатом попробуем помочь.

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

почему ты такой заботливый?

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

Такой уж я, люблю людей.

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

нет еще) пока что

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

Надо себе будильник поставить на год вперед чтобы крикнуть JKL88 "Сегодня!"

показать ответы
Автор поста оценил этот комментарий
Можете написать ещё пару постов с примерами?? Очень понравилось
раскрыть ветку (1)
Автор поста оценил этот комментарий

Даже не знаю. Все что хотел сказать - сказал. Рассказал про некоторый инструмент, добавил картинки и пояснения как его использовать. Вроде все понятно, зачем делать пост-дубликат.

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

Всем доброго времени суток. Есть онлайн игра (warspear) , можно делать несколько окон (незаконно) и ходить так разными персонажами с 1 компа. Тыкать в разные окна очень муторно, можно ли сделать так, чтобы "второстепенный" персонаж ходил на автомате за моим главным (с которого я и буду сидеть) и атаковал цели ? В самой игре есть так называемые питомцы , которые делают на автомате все то же самое , но их функционал  сильно ограничен. Хочется второго персонажа сделать этим самым питомцем . А то и сразу двух . Данные механики присутствуют в самой игре, но обычным пользователям они недоступны.

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

Скрипт может нажимать только простейшие кнопки (вперед, влево, вверх, вниз), тыкать экран. И то для того, чтобы тыкать кнопки на экране (распознавать когда они появляются), он должен их видеть, т.е. у вас должно быть как минимум два монитора.

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

Здравствуй, уважаемый @netwizard !!!


спасибо огромное за посты с автоматизацией. Я ничего об этом не знал и всегда сетовал на свою некомпетентность, когда требовалось что-то такое сделать. Буду учиться. Начал вот с поиска изображения в активном окне. Заюзал твой скрипт, чуть изменив. Работает) волшебство)


F1::


Loop,


{


ImageSearch, xp, yp, 321, 869, 377, 928, *50 123.png


Sleep 3000


If xp > 0


Break


}


SoundPlay, *16


Return


F10::ExitApp


F12::Suspend, Toggle


Подскажи, как модернизировать таким образом, чтобы выполнялось постоянно, без перезапуска каждый раз кнопкой F1.

То есть, если изображение нашлось, то каждые 3 секунды было бы звуковое уведомление, до тех пор, пока изображение не исчезло, либо скрипт не поставили на паузу/закрыли


Работа с обновляемым окном браузера, такой функционал был бы наиболее удобен.

Не думаю, что это сложно, но синтаксиса не знаю совсем, и обратиться за помощью не к кому.

Спасибо заранее)

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

Команда Break - выход из цикла. Соответственно вместо него надо поставить желаемую команду, тогда цикл будет бесконечным, пока скрипт не обновят или не прервут кнопкой F10. Будет


{

ImageSearch, xp, yp, 321, 869, 377, 928, *50 123.png

If xp > 0

SoundPlay, *16

Sleep 3000

}

показать ответы
Автор поста оценил этот комментарий
Как управлять программой изменяя её значения в памяти с помощью другой программы? Что-то типа art-money.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Не занимаюсь таким

Автор поста оценил этот комментарий
А как? Всегда интересовал вопрос управления программой манипулируя её памятью.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Не понял вопроса

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

Спасибо! Все заработало.

А правильно ли использовать Sleep'ы? Я напихал их, т.к. боюсь что страница не прогрузится и он мимо нажмет.

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

Если время не критично, например скрипт работает, а вы ушли, то можно напихать слипов побольше, чтобы перестраховаться.

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

Как скрипт будет понимать когда страница прогрузилась - либо через тот же ImageSearch, либо через WinWaitActive.

Когда браузер перейдет на другую страницу, у него наверняка поменяется заголовок. Вот скриптик для считывания заголовков:


^F2::

WinGetActiveTitle, Title

MsgBox, %Title%

Clipboard = %Title%

Return


потом делаете так


MouseClick, left, x, y

WinWaitActive, Сайт Вани Пупкина

Send ^{Tab}


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

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

@netwizard подскажи пожалуйста. Второй день не могу разобраться, написал скрипт для браузера с поиском кнопок. На странице нужно найти кнопку, нажать и перейти на следующую страницу, на второй странице нужно найти другую кнопку и нажать её и так далее. ImageSearch в первый раз срабатывает, на второй и третий отказывается что-либо делать. Его можно объявить только один раз?

Сделал как-то так:

^F1::


loop,

{

ImageSearch, x, y, 1732, 519, 1769, 606,*50 lupa.png

Sleep, 300


Send, {Control down}

MouseClick, left, x, y

Send, {Control up}

Sleep, 800

Send ^{Tab}

Sleep, 300

Send {End}

Sleep, 800


ImageSearch, findx, findy, 618, 979, 1237, 1020,*150 pogasit.png

Sleep, 300


MouseClick, left, findx, findy

Sleep, 3000

Send {End}

Sleep, 500


ImageSearch,finddx, finddy, 697, 984, 1206, 1018,*150 sohranit.png

Sleep, 300


MouseClick, left, finddx, finddy

Sleep, 3000

Send ^{vk57}

Sleep, 1000

Click, 767, 308

Sleep, 2000


}


return

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

Блок команд для каждой страницы нужно убирать в конструкции

If <условие>

{

<команды>

}


Иначе получается что скрипт заходит на первую страницу, выполняет команды, предназначенные для первой страницы И второй И третьей, затем начинает снова.


ImageSearch, x, y, 1732, 519, 1769, 606,*50 lupa.png


If x>0    ;если скрипт не нашел лупу, то иксу  присвоится пустое значение, условие не выполнится

              ;и блок команд не будет выполняться. То, что нужно

{

Sleep, 300

Send, {Control down}

MouseClick, left, x, y

Send, {Control up}

Sleep, 800

Send ^{Tab}

Sleep, 300

Send {End}

Sleep 800

}

--------------------------------------------

Далее. Проверял второй и третий imagesearch по отдельности?


F6::

ImageSearch,finddx, finddy, 697, 984, 1206, 1018,*150 sohranit.png

if finddx>0

MsgBox, OK

Return


при нажатии F6 выдает ОК?

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

Автор, помоги, пожалуйста. Как сделать поиск по двум картинкам?

Есть шкала заряда. Если заряд меньше трёх (2 или 1), выполняются действия мышью. Это всё в браузере.

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

ImageSearch, x, y, 100, 100, 200, 200, *20 zaryad1.png

If x>0

Click 300, 300


ImageSearch, x, y, 100, 100, 200, 200, *20 zaryad2.png

If x>0

Click 300, 300


Если скрипт видит картинку заряд1 или заряд2 в указанной области, то выполняет действия мышкой.

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

Можешь мне помочь с ImageSearch  и кодом в целом  ?

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

Попробую.

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

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

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

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

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

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

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

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

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

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

Можно небольшой пример?
Писать в файл то я умею давно, а вот прочитать и выцепить переменную не удавалось ни разу, хотя этот раздел читал и вроде даже понял. Только как дело до самого скрипта доходит - всё..

Вот у меня записывалка файлика координат в столбик списком под номерами в оконном режиме и в полноэкранном. Управление: на нум1 делает запись, нум2 удаляет файлик с координатами, нум3 закрывает скрипт из системы.
Использую его для получения координат UI на компах друзей, просто так быстрее им пояснить куда и когда кликать.
Вот вобще шикарно было бы научиться хранить и читать данные, можно один раз сделать калибровку и в следующие использовать её. Это довольно критично, когда скрипт работает с 20+ кнопками в игре. Не будешь же для каждой делать по 2 движения каждый раз.

/*

При нажатии Num 1 записывает в текстовый файл координаты курсора в окне и на экране.


удаляет файл с координатами на Num 2.


закрывается на Num 3.

*/



BlockInput, Mouse ; Блокирует ввод мышью на время работы команд


#SingleInstance force ; Запрещает запускать больше 1 скрипта



Counter = 0 ; Счётчик 1


Text = ,



FileDelete Coords.txt



vk61:: ; Активатор для создания и заполнения файла


SoundBeep, 2000, 200 ; Оповещение звуком



CoordMode, Mouse, Window ; Привязывает координаты к окну


MouseGetPos, X, Y ; Получает координаты курсора


Counter := Counter+1 ; Увеличение счётчика


If Counter = 1


FileAppend, Координаты курсора в окне и на экране:`n%Counter%: %X%%Text% %Y%, Coords.txt


else


FileAppend, `n%Counter%: %X%%Text% %Y%, Coords.txt



CoordMode, Mouse, Screen ; Привязывает координаты к окну


MouseGetPos, X, Y ; Получает координаты курсора


FileAppend, %Counter%: %X%%Text% %Y%, Coords.txt


Return



vk62:: ; Активатор для удаления файла


SoundBeep, 500, 400 ; Оповещение звуком


FileDelete Coords.txt


Counter = 0 ; Обнуление счётчика 1


Return



vk63:: ; Активатор для закрытия скрипта


SoundBeep, 500, 1000 ; Оповещение звуком


ExitApp


Return

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

Я калибровку делаю просто и сердито.

Если желаемый элемент не имеет постоянных координат,

я встаю на этот элемент курсором и считываю координаты:


F1::MouseGetPos A, B


F2::

;код с использованием координат, например

Click %A% %B%

Return


Таким образом можно настроить место, куда кликает кнопка F2 без редактирования самого скрипта. Просто и без всяких записей в файл.

По поводу считывания из файла - никогда раньше не делал, но наверняка в Интернете есть. Гугл выдал это

https://www.youtube.com/watch?v=eeaVPyb5d2M

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

А не подскажите как сделать что бы не появлялось контекстное меню, после того как отпускаю ПКМ масштабируя проводник, в скрипте для масштабирования окна?

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

Хм, у меня ничего не появляется. Спокойно масштабирую блокнот, проводник, браузер.

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

А не подскажете, что за ошибка с первым (масштабирование https://pastebin.com/KSyZUkq9) скриптом:

https://screenpresso.com/=RsIfb

второй работает отличною

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

Нету маркера (label), на который вы говорите скрипту прыгнуть.

Нет строки, начинающейся на Remove_Splash:

@Blanco неполный код вам дал.

показать ответы
1
Автор поста оценил этот комментарий
Хм, а вот такой вопрос. Я некоторое время назад пытался оптимизировать меню быстрых команд в Paladins чтобы, например, для просьбы о помощи достаточно было нажать 'ч' вместо "м м р", но в итоге даже без привязки к окну игры в ней скрипт не работал. Судя по всему, игра блокирует непрямые вызовы кнопок и собственно вопрос: есть ли способы это обойти?
раскрыть ветку (1)
Автор поста оценил этот комментарий
1
Автор поста оценил этот комментарий
В свое время была отличная бесплатная программка под линукс. Называлась, только не смейтесь, "sikuli". Умела все это и даже больше. Кому интересно - Гугл в помощь.
раскрыть ветку (1)
Автор поста оценил этот комментарий

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

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

Ахренеть!

Теперь трекбол не надо будет 3сек устанавливать, чтоб поймать границы окна!

Спасибо!

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

KeyWait "F1"

F1 нужно писать без кавычек.

https://autohotkey.com/docs/commands/KeyWait.htm

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

А если элемент в модальном окне?

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

Модальное окно рассматривается автохоткеем как отдельное окно. Соответственно для клика по элементу в модальном окне нужны его координаты относительно этого окна, а не родительского окна.

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

Не в том дело, клики посылаются нормально, а вот состояние экрана не получается, даже GetPixelColor возвращает 0 из любой точки окна.

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

Ну или спросите на форуме

http://forum.script-coding.com/viewforum.php?id=2

И отпишитесь здесь, если найдете решение. Или не найдете. Интересно.

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

Не в том дело, клики посылаются нормально, а вот состояние экрана не получается, даже GetPixelColor возвращает 0 из любой точки окна.

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

Хм. Первое, что приходит на ум - запустить Java в виртуальной машине, и автохоткеем считывать изображение из исходной операционной системы. Тогда можно обойти ограничение, создаваемое, например, DirectX или чем-то там еще.


Либо использовать не виртуальную винду, а эмулятор Java, не знаю, существуют ли такие.


Гуглопоиск ничего путного не дал.

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

Кстати, давно хотел спросить, почему автохоткей не может делать вот это в java-приложениях, если они развернуты на весь экран? Можно ли как-то обойти это?

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

Кстати, давно хотел спросить, почему автохоткей не может делать вот это в java-приложениях, если они развернуты на весь экран? Можно ли как-то обойти это?

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

Не сталкивался. Но попробуй вот это:

#comment_90137129

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

Научи его играть за тебя.

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

Мне лень =)

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

молодец конечно но все равно не понятно не чего.

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

Прочтите первую часть, если непонятно.

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

молодец конечно но все равно не понятно не чего.

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

А что именно непонятно?

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

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

показать ответы