Помогите с else/if ахк

DeMoN3D

Известный
Автор темы
366
77
я тут набросал код, должен искать одну из картинок, если находит - делает определенное действие. У меня возникла проблема с тем, чтобы скрипт шёл к следующему действию, если условие прошлого if не истинно. Если делать по одной картинке, то всё находит, прошу помощи.

Вот код:
AutoHotKey:
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Numpad1::
    T := !T
    SetTimer, Loop, -1
    return

Loop:
    While T {
        ImageSearch, FoundX1, FoundY1, 0, 0, 1440, 900, F:\down.bmp
        ImageSearch, FoundX2, FoundY2, 0, 0, 1440, 900, F:\up.bmp
        ImageSearch, FoundX3, FoundY3, 0, 0, 1440, 900, F:\left.bmp
        ImageSearch, FoundX4, FoundY4, 0, 0, 1440, 900, F:\right.bmp
        if (FoundX1 & FoundY1) {
            Send, {vk28}
        }
        else {
            if (FoundX2 & FoundY2) {
                Send, {vk26}
            }
            else {
                if (FoundX3 & FoundY3) {
                    Send, {vk25}
                }      
                else {
                    if (FoundX4 & FoundY4) {
                        Send, {vk27}
                    }
                }
           }
       }
    }
return

Numpad3::
    Pause, on
return
 
Последнее редактирование:
Решение
AutoHotKey:
#Persistent
#SingleInstance force

NumPad1::
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\up.bmp

if ErrorLevel = 0                    ; Если нашел первое изображение на экране
    Send, {vk26}; Your Code
else                                ; Если не нашел первое изображение на экране
    msgbox, D:\up.bmp`nErrorLevel = %ErrorLevel%
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\down.bmp
if ErrorLevel = 0                ; Если нашел второе изображение на экране
    Send, {vk28}    ; Your Code
else
    msgbox, D:\down.bmp`nErrorLevel = %ErrorLevel%
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\left.bmp    ; Если второе изображение не найдено
if ErrorLevel = 0 
    Send, {vk25}    ; Your Code
else
    msgbox...

meowprd

Тот самый Котовский
Проверенный
1,278
720
AutoHotKey:
#Persistent
#SingleInstance force

NumPad1::
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, D:\file1.png
    if ErrorLevel = 0                    ; Если нашел первое изображение на экране
        ; Your Code
    else                                ; Если не нашел первое изображение на экране
        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, D:\file2.png
        if ErrorLevel = 0                ; Если нашел второе изображение на экране
            ; Your Code
        else                            ; Если второе изображение не найдено
            ; Your Code
return
 
  • Нравится
Реакции: DeMoN3D

DeMoN3D

Известный
Автор темы
366
77
AutoHotKey:
#Persistent
#SingleInstance force

NumPad1::
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, D:\file1.png
    if ErrorLevel = 0                    ; Если нашел первое изображение на экране
        ; Your Code
    else                                ; Если не нашел первое изображение на экране
        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, D:\file2.png
        if ErrorLevel = 0                ; Если нашел второе изображение на экране
            ; Your Code
        else                            ; Если второе изображение не найдено
            ; Your Code
return

AutoHotKey:
#Persistent
#SingleInstance force

NumPad1::
    Loop:
    {
        ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\up.bmp
        if ErrorLevel = 0                    ; Если нашел первое изображение на экране
            Send, {vk26}; Your Code
        else                                ; Если не нашел первое изображение на экране
            ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\down.bmp
            if ErrorLevel = 0                ; Если нашел второе изображение на экране
                Send, {vk28}    ; Your Code
            else 
                ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\left.bmp    ; Если второе изображение не найдено
                if ErrorLevel = 0   
                    Send, {vk25}    ; Your Code
            else 
                ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\right.bmp    ; Если второе изображение не найдено
                if ErrorLevel = 0   
                    Send, {vk27}    ; Your Code
    }
return

Numpad3::
    Pause, on
return

Я явно что-то делаю не так,изображения точно совпадают, я их даже скринил в реал тайм и перезагружал скрипт, но ничего не происходит
 

meowprd

Тот самый Котовский
Проверенный
1,278
720
AutoHotKey:
#Persistent
#SingleInstance force

NumPad1::
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\up.bmp

if ErrorLevel = 0                    ; Если нашел первое изображение на экране
    Send, {vk26}; Your Code
else                                ; Если не нашел первое изображение на экране
    msgbox, D:\up.bmp`nErrorLevel = %ErrorLevel%
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\down.bmp
if ErrorLevel = 0                ; Если нашел второе изображение на экране
    Send, {vk28}    ; Your Code
else
    msgbox, D:\down.bmp`nErrorLevel = %ErrorLevel%
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\left.bmp    ; Если второе изображение не найдено
if ErrorLevel = 0 
    Send, {vk25}    ; Your Code
else
    msgbox, D:\left.bmp`nErrorLevel = %ErrorLevel%
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\right.bmp    ; Если второе изображение не найдено
if ErrorLevel = 0 
    Send, {vk27}    ; Your Code
else
    msgbox, D:\right.bmp`nErrorLevel = %ErrorLevel%
return

Numpad3::
    Pause, on
return

Вставь этот код, не редактируя и сравнивай с ErrorLevel ниже.

ErrorLevel устанавливается в:
0 – если изображение в заданной области было найдено
1 – если не было найдено
2 – если возникли проблемы, препятствующие проведению поиска (такие как ошибка при открытии файла изображения или неверное оформление опций).
 
Последнее редактирование модератором:
  • Нравится
Реакции: BASS_DEVSOFTWARE и DeMoN3D

DeMoN3D

Известный
Автор темы
366
77
AutoHotKey:
#Persistent
#SingleInstance force

NumPad1::
ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\up.bmp
if ErrorLevel = 0                    ; Если нашел первое изображение на экране
    Send, {vk26}; Your Code
else                                ; Если не нашел первое изображение на экране
    msgbox, D:\up.bmp`nErrorLevel = %ErrorLevel%
    ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\down.bmp
    if ErrorLevel = 0                ; Если нашел второе изображение на экране
        Send, {vk28}    ; Your Code
    else
        msgbox, D:\down.bmp`nErrorLevel = %ErrorLevel%
        ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\left.bmp    ; Если второе изображение не найдено
        if ErrorLevel = 0 
            Send, {vk25}    ; Your Code
        else
            msgbox, D:\left.bmp`nErrorLevel = %ErrorLevel%
            ImageSearch, FoundX, FoundY, 0, 0, 1440, 900, D:\right.bmp    ; Если второе изображение не найдено
            if ErrorLevel = 0 
                Send, {vk27}    ; Your Code
            else
                msgbox, D:\right.bmp`nErrorLevel = %ErrorLevel%
return

Numpad3::
    Pause, on
return

Вставь этот код, не редактируя и сравнивай с ErrorLevel ниже.

ErrorLevel устанавливается в:
0 – если изображение в заданной области было найдено
1 – если не было найдено
2 – если возникли проблемы, препятствующие проведению поиска (такие как ошибка при открытии файла изображения или неверное оформление опций).
1589248530452.png



И как понять, какая проблема поиска возникла?
 

meowprd

Тот самый Котовский
Проверенный
1,278
720
  • Нравится
Реакции: DeMoN3D