1

Тема: AHK: Ожидание ImageSearch

Здравствуйте, я написал простой скрипт для последовательного поиска нескольких кнопок. Допустим скрипт нажал на одну кнопку, и через 1-5 секунд появилась вторая.

Вопрос: Как сделать так, чтобы скрипт нажимал на изображение которое ищет сразу, как он его увидел на экране?

2

Re: AHK: Ожидание ImageSearch

Используйте команды:

  • Click

  • MouseClick

  • Send, Click

  • ControlClick

3

Re: AHK: Ожидание ImageSearch

А можете подробней рассказать, как их использовать в моем случае? Вот мой код

CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *75 C:\Documents and Settings\Admin\Мои документы\Мои рисунки\Кнопка.bmp
MouseClick, left, %FoundX%, %FoundY%

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

4

Re: AHK: Ожидание ImageSearch

А как он узнает, что картинка появилась на экране и пора её искать?

5

Re: AHK: Ожидание ImageSearch

Не надо говорить загадками, я чайник, скажите прямо

6

Re: AHK: Ожидание ImageSearch

Дело в том, что Вы себе противоречите. Пока скрипт не найдёт изображение, он его не может "увидеть".
Вы должны дать скрипту понять, что изображение появилось. Иначе придётся производить поиск периодически (см. Loop и SetTimer).

7

Re: AHK: Ожидание ImageSearch

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

CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
1:
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *75 C:\Documents and Settings\Admin\Мои документы\Мои рисунки\Продать.bmp
if Errorlevel = 0
{
Goto, 2
}
Else
{
Goto, 1
}
2:
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *75 C:\Documents and Settings\Admin\Мои документы\Мои рисунки\Продать.bmp
MouseClick, left, %FoundX%, %FoundY%

8

Re: AHK: Ожидание ImageSearch

Goto - зло. Gosub его заменяет. А петли лучше делать всё-таки через Loop.

CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
Loop
{
  ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *75 C:\Documents and Settings\Admin\Мои документы\Мои рисунки\Продать.bmp
  If !Errorlevel
    MouseClick, left, %FoundX%, %FoundY%
}

9

Re: AHK: Ожидание ImageSearch

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

10

Re: AHK: Ожидание ImageSearch

becauseim, ожидание появления изображения как раз реализуется в виде периодических проверок.

11

Re: AHK: Ожидание ImageSearch

ypppu, следовательно, необходимо остановить проверку после обнаружения. Например, по нажатию на F1 начинается поиск изображения, если в течение, например, трех секунд оно не было найдено, прекратить работу сценария. Если же найдено, остановить поиск и перейти к следующей команде. Как это реализовать?

12

Re: AHK: Ожидание ImageSearch

Вот у Drugoy проверяется успешность выполнения команды (ErrorLevel). А Вам нужно в начале цикла засечь время и дополнительно проверять, сколько времени прошло (переменная A_TickCount). Либо, если известно, что, к примеру, проверка проводится каждые 500 мсек, то ограничить число итераций цикла до 6.

13

Re: AHK: Ожидание ImageSearch

ypppu, не понял Вашу логику. Насколько мне ясно, нужно просто прервать цикл после первого обнаружения изображения. Только не знаю, как это сделать.

14

Re: AHK: Ожидание ImageSearch

F1::
CoordMode, Pixel, Screen
EndTime := A_TickCount + 3000
While EndTime>A_TickCount {
ImageSearch, OutputVarX, OutputVarY, 0, 0, A_ScreenWidth, A_ScreenHeight, test.bmp
If !ErrorLevel
    Break
}
If ErrorLevel
    MsgBox Изображение не найдено или возникла проблема с поиском
Else
    MsgBox Изображение найдено
Return

15 (изменено: becauseim, 2016-11-18 16:40:32)

Re: AHK: Ожидание ImageSearch

Nikva, а если необходимо прекратить ожидание окна спустя заданное время, для этого существует отдельная функция или использовать тот же метод, что и при ожидании изображения?

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

upd.: Нашел соответствующий параметр в команде WinWait