AutoHock для поиска изображений

0

Я изучаю, как использовать autohotkey, и я хотел создать скрипт, который открывает игру из Steam и автоматически подключается к определенному серверу. Мой код до сих пор:

F1::
Run, steam://rungameid/346110
Sleep, 15000 <--- This is more or less the time that my computer takes to load it, and I want another way to check if the game is already loaded
MouseClick, left, 156, 520 <--- (Position of "JOIN ARK")
Sleep, 1500 <--- This is the time that takes to load the button (JOIN LAST SESSION) also I want to check this with another more efficient way
MouseClick, left, 746, 940 <--- Click the button "JOIN LAST SESSION"
return

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

1- Откройте игру, если она не открыта. Если он открыт, перезапустите его.

2- Проверьте, когда появляется меню, и нажмите кнопку «ПРИСОЕДИНИТЬСЯ», расположенную в точке x, y (156 520).

3- Проверьте, когда появляется кнопка «ПРИСОЕДИНИТЬСЯ К ПОСЛЕДНЕЙ СЕССИИ», и нажмите ее.

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

Я думал об OCR, но не знаю, как реализовать его с помощью autohotkey.

Любая помощь будет оценена.

J0ki
источник

Ответы:

2

Решением вашей проблемы является использование функции ImageSearch.

Если вы нажмете кнопку печати экрана всякий раз, когда появляются эти всплывающие окна, вы можете затем CRTL + V вставить его в краску. Затем обрежьте изображение так, чтобы у вас было только всплывающее окно, и сохраните его как файл .bmp. Затем вы можете использовать этот растровый файл в вашем коде ImageSearch.

Быстрый просмотр чьего-либо кода ImageSearch можно найти здесь .

Поэтому, если ваш сценарий находит изображение, которое он ищет, вы можете набросать дополнительный код для запуска под ErrorLevel = 0.

Если ваш скрипт не может найти изображение, вы можете набросать другой код для запуска под ErrorLevel = 1

Желательно, чтобы в этот момент вы начали маркировать свои разделы кода и использовать «Gosub», чтобы ваш код мог переходить между подпрограммами, когда он сталкивается с различными переменными «если». Таким образом, вам не нужно создавать гигантский сценарий, повторяющий себя слишком много.

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

Пример:

    ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp

if ErrorLevel = 2
    MsgBox Could not conduct the search.
else if ErrorLevel = 1
    MsgBox Icon could not be found on the screen.
else
    MsgBox The icon was found at %FoundX%x%FoundY%.
Myles
источник
я отредактировал свой вопрос ^^ Мне нравится ответ, но я все еще не могу его воспроизвести
J0ki
Я все еще пытаюсь, но ImageSearch, похоже, не работает @Myles
J0ki
@ J0ki функция ImageSearch должна работать на вас, если ваш код верен. Лучший способ проверить, что вы все делаете правильно, - это создать очень простой скрипт, который ищет изображение на вашем экране, и, если он найден или нет, использовать функцию «msgbox», чтобы вызвать сообщение как ErrorLevel = 1, так и 0 переменные. Кроме того, сообщество AHK сможет помочь вам изменить ваш код, чтобы он работал. Они отличная куча и часто сообщают вам точно, где вы идете не так, когда вы вставляете свой код для их просмотра.
Майлз