1

Тема: AHK: 5 уровневый цикл Loop.

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

Loop
{
    ; Ищем есть картинка в окне или нет
    ImageSearch, FoundX, FoundY, 96, 256, 325, 431, %A_ScriptDir%\img\PUST_images.png
    sleep, 2000
    If ErrorLevel = 1
    {
        ; Если не пустое поле картинки
        Sleep, 350
        Send, {Insert}

    ; Если поле картинки пустое, значит добавляем доп картинки
    If ErrorLevel = 0
    {
        Sleep, 500
        Send, {Ins} ; 2ая картинка

        Loop
        {
            ;поиск голубой рамки выделения картинки 2ой картинки
            ImageSearch, FoundX, FoundY, 298, 102, 425, 219, %A_ScriptDir%\img\1CBlue.png
            Sleep, 1000
            if ErrorLevel = 0
            {
                Sleep, 350
                Send, {Enter}

                ;3я картинка
                Sleep, 500
                Send, {Insert}

                ;поиск голубой рамки выделения картинки 3ой картинки
                Loop
                {
                    ImageSearch, FoundX, FoundY, 434, 100, 552, 215, %A_ScriptDir%\img\1CBlue.png
                    Sleep, 1000
                    If ErrorLevel = 0
                    {
                        Sleep, 350
                        Send, {Enter}

                        ;4ая картинка
                        Sleep, 500
                        Send, {Insert}
						
						;поиск голубой рамки выделения картинки 4ой картинки
                        Loop
                        {
                            ImageSearch, FoundX, FoundY, 173, 218, 282, 335, %A_ScriptDir%\img\1CBlue.png
                            Sleep, 1000
                            If ErrorLevel = 0
                            {
                                Sleep, 350
                                Send, {Enter}

                                ;5ая картинка, она же последняя
                                Sleep, 500
                                Send, {Insert}

                                ;поиск голубой рамки выделения картинки 5ой картинки
                                Loop
                                {
                                    ImageSearch, FoundX, FoundY, 305, 219, 426, 345, %A_ScriptDir%\img\1CBlue.png
                                    Sleep, 1000
                                    If ErrorLevel = 0
                                    {
                                        Sleep, 350
                                        Send, {Enter}
                                    }

                                    ;Если нет 5ой картинки
                                    If ErrorLevel = 1
                                    {
                                        Sleep, 200
                                        Send, {Escape}
                                        Sleep, 200
                                        break
                                    }
                                }
                            }

                            ; Если нет 4ой картинки
                            If ErrorLevel = 1
                            {
                                Sleep, 200
                                Send, {Escape}
                                Sleep, 200
                                break
                            }
                        }

                    }

                    ; Если нет 3ей картинки
                    If ErrorLevel = 1
                    {
                        Sleep, 200
                        Send, {Escape}
                        Sleep, 200
                        break
                    }
                }

            }

            ; Если нет 2о1 картинки
            If ErrorLevel = 1
            {
                Sleep, 350
                Send, {Escape}
                Sleep, 350
                break
            }
        }

    }
    ;Пауза между поисками
    Sleep, 500
}

Я удалил все лишнее, оставил только циклы, для удобства а то там почти 300 строчек вышло.

2

Re: AHK: 5 уровневый цикл Loop.

А в каких ситуациях нужно выходить из первого цикла? Сделайте проверку на эти ситуации и выходите, если они обнаружены.

3

Re: AHK: 5 уровневый цикл Loop.

YMP
Хм, а можно обнаружить что с предыдущего цикла вышли Break?

4

Re: AHK: 5 уровневый цикл Loop.

Можно переменную какую-нибудь устанавливать.

5

Re: AHK: 5 уровневый цикл Loop.

У вас ошибка в первом же цикле (дальше не смотрел).

Loop
{
    ; Ищем есть картинка в окне или нет
    ImageSearch, FoundX, FoundY, 96, 256, 325, 431, %A_ScriptDir%\img\PUST_images.png
    sleep, 2000
    If ErrorLevel = 1
    {
        ; Если не пустое поле картинки
        Sleep, 350
        Send, {Insert}

    ; Если поле картинки пустое, значит добавляем доп картинки
    If ErrorLevel = 0	; ---- вот здесь. Эта проверка выполнится только если ErrorLevel = 1, но в этом случае она не имеет смысла: ErrorLevel уже равен 1, и равным 0 быть не может. 
    {

Надо или закрыть блок ErrorLevel = 1:

Loop
{
    ; Ищем есть картинка в окне или нет
    ImageSearch, FoundX, FoundY, 96, 256, 325, 431, %A_ScriptDir%\img\PUST_images.png
    sleep, 2000
    If ErrorLevel = 1
    {
        ; Если не пустое поле картинки
        Sleep, 350
        Send, {Insert}
	}	; ---- вот здесь
    ; Если поле картинки пустое, значит добавляем доп картинки
    If ErrorLevel = 0

или ещё что-нибудь, я толком не вник, чего вы хотите.

6

Re: AHK: 5 уровневый цикл Loop.

Qp
Ммм, спасибо, но я в итоге не разобрался, наверно сам не до конца вижу всю картину, и когда сам цикл занимает почти 300 строчек, я там путаюсь. В итоге я добавил там sleep, 1000 что бы было время на поиск и убрал циклы вообще.