657

Автоматизация рутины с 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.

Дубликаты не найдены

+24

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

раскрыть ветку 23
+5

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

Иллюстрация к комментарию
раскрыть ветку 20
+30
- ты доволен? Я пишу скрипт, чтобы завалить косаря!
- заткнись! Заткнись!
раскрыть ветку 2
+3

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

раскрыть ветку 6
0

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

раскрыть ветку 9
0

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

раскрыть ветку 1
0

AutoHotKey

+5

Я правильно понял, что координаты берутся относительно экрана, а не окна программы и в случае если сдвинуть окно программы, то скрипт не сработает?

раскрыть ветку 7
+6

Координаты по дефолту относительны окну программы

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

раскрыть ветку 6
+5
То есть если я поменяю размер окна, изменив уровень сложности, то скрипт отвалится.
раскрыть ветку 4
0

понятно, значит относительно активному окну, спасибо.

+13
Следующий раз запили пост о скрипте который позволит пролайкать всю страницу в вк, включая записи на стене, фотки и видеозаписи.
раскрыть ветку 12
+19

А потом, который дизлайкает все посты на страницах пикабушников

раскрыть ветку 9
+9

W, D, W, D?

раскрыть ветку 3
-1
Просто хочу завоевать сердце одной прекрасной дамы, но все времени нет. Скрипт бы помог.
раскрыть ветку 4
0
Для этого лучше Selenium IDE использовать.
раскрыть ветку 1
0

У вконтакте есть АПИ, можно туда Postman'ом заслать запросы.

+8

Это, конечно, прикольно, но для автоматизации есть вещи и посерьезнее. Например, RPA. Рассмотрим на примере софтины Blue Prism Automate, поскольку работаю я именно с ней.


С ее помощью можно автоматизировать что угодно, начиная от веб-приложений и заканчивая консольными приложениями мейнфреймов. Если автоматизируемое приложение слишком нестандартное, и встроенному application modeller не удается найти элеметны управления, то можно использовать surface automation, который будет попиксельно их искать как в посте ТС-а чекается статус игрока.


При этом все это можно реализовать, не написав ни одной строчки кода. В Blue Prism весь алгоритм работы робота составляется при помощи блок-схем, которые реализуют ряд простых функций типа манипуляций с элементами управления автоматизируемой программы и функций посложнее типа работы с электронной почтой, БД и т.д.


При необходимости можно реализовывать необходимый функционал при помощи небольших скриптов на C#, J# или VBA. Все это дает крайне мощные инструменты для автоматизации.

К примеру, при помощи встроенных библиотек и небольших самописных скриптов на C# можно автоматизировать MS Excel до такой степени, что человеку останется лишь только подсовывать ему новые данные для работы, а эксель сам будет себе шуршать отчеты и статистику

раскрыть ветку 7
+6

а можете пост запилить? было бы интересно

0
К примеру, при помощи встроенных библиотек и небольших самописных скриптов на C# можно автоматизировать MS Excel до такой степени, что человеку останется лишь только подсовывать ему новые данные для работы, а эксель сам будет себе шуршать отчеты и статистику

Внезапно(!) в MS Excel есть встроеный VisualBasic + макросы которые делают все то же самое, но слегка дешевле. Ой, тоесть совсем дешево. Бесплатно.


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

раскрыть ветку 1
+1

Эта платформа уже имеет встроенные возможности по работе с MS Excel, которая внезапно(!) использует ту же самую либу по работе с экселем . По факту, в реалиях Blue Prism это набор реализованных небольших макросов-функций (типовые задачи вроде открытия документа, внесения туда данных и т.д.), которые "обернуты" для удобного использования внутри этой самой платформы.


Но суть не в том.


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


Но если вам необходимо, к примеру, регулярно обрабатывать клиентские выгрузки объемом по нескольку десятков миллионов строк, валидировать данные, а затем разносить их по еще нескольким системам и генерить какие-либо отчеты на основе проделанной работы с минимальным вовлечением человека на основе уже существующей в вашей компании инфраструктуры (софта и прочего), то RPA - ваш выбор.


Вам не потребуется написание и последующая поддержка специфического софта для автоматизации подобной задачи, лишь описание алгоритма автоматизируемого бизнес-процесса (реализация зависит от конкретного вендора RPA-платформ). Зато у вас в сухом остатке увеличение скорости выполнения работы, минимизация ошибок, возможность уменьшения штата сотрудников или их высвобождение для выполнения каких-либо более приоритетных задач.


Это решения, ориентированные на крупные компании вроде процессинговых центров, банков и т.д., а не абстрактные ООО "Моя оборона" со штатом в три с половиной человека.

0

Где только эту софтину взять

раскрыть ветку 3
+1

Только купить, т.к. это enterprise решение, но и цены там соответствующие)

раскрыть ветку 2
+4

Я помню на autohotkey писал скрипт для фарма ресурсов в одной гриндилке на 5 персонажей, через распознавание цвета пикселей на мини-карте. 5 персонажей гуськом бежали на место добычи ресурсов, копали, умирали, оживали и бежали дальше. Жуткое было зрелище со стороны.

+3
Подписался. Кстати у тебя 1 год, 1 месяц 1 день и все такое. Когда-нибудь твои посты пригодятся мне, но не сегодня
раскрыть ветку 1
+2

Спасибо!

Иллюстрация к комментарию
+3

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

раскрыть ветку 7
0

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

раскрыть ветку 4
0

Попробую.

раскрыть ветку 3
0

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

раскрыть ветку 1
+2

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

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

+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 секунды было бы звуковое уведомление, до тех пор, пока изображение не исчезло, либо скрипт не поставили на паузу/закрыли


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

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

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

раскрыть ветку 2
0

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


{

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

If xp > 0

SoundPlay, *16

Sleep 3000

}

раскрыть ветку 1
0

Спасибо, заработало) Чуть паузу ещё переделал

вместо Suspend - Pause, теперь идеально

ещё раз благодарю!

+1

Я на АНК писал ботовода для линейдж 2.
Отлично работает схема в 9 окон. Одно основное, остальные 8 свернуты. И по нажатиям клавиш - в свернутые окна команды отправлялись.
Также помогает банально автоматизировать монотонную работу и в некоторых случаях как костыль - коллега не умела переключать язык на компьютере (точнее умела, но делала это ооочень долго). И в ворде ей нужно было часто ставить апостроф (который находится на букве "Э" в английской раскладке). Теперь она просто запускает скрипт и по ctrl+э у нее апостроф ставиться. Ей так проще.

раскрыть ветку 5
0

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

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

раскрыть ветку 4
+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

раскрыть ветку 2
+1

Долго копался в этом - в итоге работает следующее (тут на 4 окна):


Ctrl+Alt+*цифра от 1 до 4* - открываем нужное окно и жмем комбинацию, окно запишется в переменную.


Отправка нажатий - controlSend, , {F1}, ahk_id %Wind1%

где %Wind1% - переменная окна под номером 1.


Сам скрипт::

;Переменные для удобства
Wind1 = 0
Wind2 = 0
Wind3 = 0
Wind4 = 0
;Ввод идентификаторов окна по Ctrl+Alt+№ окна
^!1::
WinGet, Wind1, ID, A
MsgBox, Окно № 1
return
^!2::
WinGet, Wind2, ID, A
MsgBox, Окно № 2
return
^!3::
WinGet, Wind3, ID, A
MsgBox, Окно № 3
return
^!4::
WinGet, Wind4, ID, A
MsgBox, Окно № 4
return
;Отправка команд
1:: ;Окнам F1 по нажатию 1
controlSend, , {F1}, ahk_id %Wind1% ;01
controlSend, , {F1}, ahk_id %Wind2% ;02
controlSend, , {F1}, ahk_id %Wind3% ;03
controlSend, , {F1}, ahk_id %Wind4% ;04
controlSend, , {F1}, ahk_id %Wind5% ;04
return
+1

Дружище, большое тебе спасибо за подобные посты и очень грамотные и качественные объяснения!

Может я туплю, и в то же время не могу найти информации по такому примеру:


Как создать второе условие?

Если находит то MsgBox, Muhaha!

Если не находит то, к примеру MsgBox, WellDone...

раскрыть ветку 3
0

Допер !

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


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


Так ведь ?

раскрыть ветку 2
+1

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

F1::

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

Return


F2::

;еще код

Return


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


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

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

раскрыть ветку 1
+1
Попробуй на видяхе сравнивать картинки, будешь приятно удивлен приросту производительности, тогда и координаты не надо выбирать. Можно отслеживать не весь экран, а картинку активного окна.
раскрыть ветку 1
0
А как это делать на этом софте?
+1
В свое время была отличная бесплатная программка под линукс. Называлась, только не смейтесь, "sikuli". Умела все это и даже больше. Кому интересно - Гугл в помощь.
раскрыть ветку 3
+2

я с помощью нее одно онлайн казхино обул баксов на 500)

0
Хорошая штука была.

А что с ней сейчас стало? Разработка заброшена?

0

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

0
Можете написать ещё пару постов с примерами?? Очень понравилось
раскрыть ветку 1
0

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

0

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

раскрыть ветку 1
0

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

0

Доброго времени суток, прошу у Вас совета.
Есть необходимость найти два одинаковых изображения и только после этого выругаться и остановить скрипт. Как это можно реализовать?
Примеры из поиска гугла так и не удалось подправить под нужды =(

раскрыть ветку 1
+1

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

0

@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

раскрыть ветку 3
0

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

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
0

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

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

раскрыть ветку 1
0

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

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

раскрыть ветку 2
0

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 в указанной области, то выполняет действия мышкой.

раскрыть ветку 1
+2

Спасибо, всё получилось. Я видимо просто тупой))

0
Комментарий удален. Причина: данный аккаунт был удалён
0

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

раскрыть ветку 4
+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

раскрыть ветку 3
0

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

Вот у меня записывалка файлика координат в столбик списком под номерами в оконном режиме и в полноэкранном. Управление: на нум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

раскрыть ветку 2
0

а можно создать скрипт для автоматизации ловли рыбы в игре Torchlight ?

Смысл: надо нажать мышкой на круглую кнопку когда внешнее кольцо соединиться с внутренним

Иллюстрация к комментарию
раскрыть ветку 10
+1

Можно. На сколько помню когда соединяются круги - цвет меняется на более светлый. Сделайте запись видео с высокой частотой кадров и с кадра где круги соединены возьмите скриншот. Дальше как в посте.
Но легче запустить скрипт калибрующий цвет пикселя под курсором. Короче вот:
https://www.youtube.com/watch?v=bh1NRXMeFB0
https://pastebin.com/HDJqNCHb

раскрыть ветку 9
0
На сколько помню когда соединяются круги - цвет меняется на более светлый.

да, вроде бы. спасибо

раскрыть ветку 8
0

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

раскрыть ветку 1
+1

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

0

smert.png

0
Хм, а вот такой вопрос. Я некоторое время назад пытался оптимизировать меню быстрых команд в Paladins чтобы, например, для просьбы о помощи достаточно было нажать 'ч' вместо "м м р", но в итоге даже без привязки к окну игры в ней скрипт не работал. Судя по всему, игра блокирует непрямые вызовы кнопок и собственно вопрос: есть ли способы это обойти?
раскрыть ветку 5
+2

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

раскрыть ветку 1
+1

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

+1

Покури фак в AHK там есть команды для имитации нажатий клавиш.
Send / SendRaw / SendInput / SendPlay / SendEvent: Send Keys & Clicks - название раздела.
Если не поможет, то сделай задержку на нажатие клавиши. В некоторых случаях (у меня это было в borderlands) игра просто не успевает задетектить нажатие, каким способом бы оно не было имитировано. Сделать можно так:

Send {Space down}
Sleep 100
Send {Space up}

В таком случае скрипт прожмёт пробел, подождёт 100мс и отпустит пробел.
Я так автоматизировал высокие прыжки с помощью двух гранат и смену экипировки по требованию.

раскрыть ветку 1
0
Спасибо! Попробую
0
0

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

раскрыть ветку 16
+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.

раскрыть ветку 15
0

(facepalm) всё норм, я установил v2.0 alfa. снёс и поставил v1.1 - всё работает.

0

Работает!

Но постоянно выпадает такое: https://screenpresso.com/=FEe8d

И пока это окно не закроешь, не реагирует на F1

0

Ахренеть!

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

Спасибо!

раскрыть ветку 12
0
А что будет если окошко с сапером перенести в другую область экрана?
раскрыть ветку 3
+2

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

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

раскрыть ветку 2
0

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

раскрыть ветку 1
0

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

раскрыть ветку 5
раскрыть ветку 3
0

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

раскрыть ветку 2
0

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

#comment_90137129

0

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

раскрыть ветку 4
0

Мне лень =)

раскрыть ветку 3
+1

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

раскрыть ветку 2
-1
Кто посоветует нормальную прогу для создания горячих клавиш на определенные действия, вроде увеличения звука или запуск браузера? Что бы работало всегда, независимо от активного приложения.
Мультимедийных клавиш нету на клавиатуре
раскрыть ветку 4
+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 стрелка влево и вправо.

0
Autohotkey так может,  причем можно скомпилировать в исполняемый файл, и пользоваться переназначением даже в отсутствии установленной программы, можно задать хоткей на прерывание, чтобы отключать или включать переназначение
раскрыть ветку 1
0

Я давно ищу такую программку. Но под Mac их просто нет(((

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

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

-1
Дроч это конечно тот еще, в памяти сапера совсем не сложно найти смещение где записывается текущее состояние игры, так и отдельного ui элемента. Никогда бы не стал делать такие костыли, если можно прочесть это прямо в памяти.
-1

зачем?

раскрыть ветку 5
+5

затем

раскрыть ветку 4
0
А как? Всегда интересовал вопрос управления программой манипулируя её памятью.
раскрыть ветку 3
-2

научить скрипт играть за себя в принципе не трудно - но муторно. надо прописать все значения на подобие "что делать если в этом поле цифра 3 - надо проверить соседние поля,распознать есть ли там граница игрового поля, открыты ли клетки, если да то какие цифры и по ним сделать вывод и т.д. и т.п.". можно то можно и даже не трудно, но опять же повторюсь - это ооочень муторно :)

-4

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

раскрыть ветку 9
+8

"Ничего" пишется слитно, через "и".

Иллюстрация к комментарию
ещё комментарии
0

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

0

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

раскрыть ветку 4
0

Tooltip, %X% %Y%

Clipboard = %X%, %Y%


Sleep 1000


Tooltip


Return


да я вот сколько не пытался освоить так и не понял как это работает как сами скрипты редактировать.  

-2

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

раскрыть ветку 2
-1
Также нихера не понял))
Похожие посты
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: