1

Тема: AHK: как сделать в loop чтобы действие происходило 1 раз

Здравствуйте, написал скрипт, который нажимает клавиши когда видит определённый пиксель, но пока он видит он постоянно без остановки спамет отрезок loop он начинается с Send, {PgDn Down}  и заканчивается   Sleep, 333  Send, {F1}, как сделать чтобы это действие нажалось 1 раз и не повторялась больше пока не пропадёт пиксель. Сформулировал как смог, больно не серчайте на меня.

{
sc50::    ;  "Numpad2"
Loop
{
    WinActivate, ahk_pid %id1%
    Sleep, 333
    CoordMode, Pixel, Window
    PixelSearch, FoundX, FoundY, 31, 58, 31, 58, 0x7F4644, 0, Fast RGB
    If (ErrorLevel = 0)
    {
        Send, {PgDn Down}
        Sleep, 200
        Send, {PgDn Up}
        Sleep, 1000
        WinActivate, ahk_pid %id2%
        Send, {F11}
        Sleep, 300
        WinActivate, ahk_pid %id1%
        Sleep, 333
        Send, {F1}
    }
    Send, {Home Down}
    sleep 193
    Send, {Home Up}
    Sleep, 1000
    If (ErrorLevel)
    {
        Send, {F2}
        Sleep, 400
    }
}
sc51::pause    ;  "Numpad3"
return
}

2 (изменено: Clannad5, 2022-09-11 20:24:17)

Re: AHK: как сделать в loop чтобы действие происходило 1 раз

plastbit22
Просто сделайте так, чтобы скрипт после прохода запоминал цвет пикселя и при повторном запуске проверял, изменился ли цвет пикселя или же нет.

Немного небрежный пример, но думаю вы поймёте о чем я.

{
sc50::    ;  "Numpad2"
pixelcolor := "0x7F4644" ; Добавляем изначальное условие цвета
Loop
{
    WinActivate, ahk_pid %id1%
    Sleep, 333
    CoordMode, Pixel, Window
    PixelSearch, FoundX, FoundY, 31, 58, 31, 58, %pixecolor%, 0, Fast RGB ; указываем переменную за место цвета
    If (ErrorLevel = 0)
    {
if pixelcolor = 0x7F4644 ; Если нужный цвет то запустить снизу код
{
pixelcolor := "0xff0000" ; А теперь мы меняем условие на поиск другого пикселя, который знаем заранее, если не знаем, то немного нужно будет по другому написать, но принцип тот же.
        Send, {PgDn Down}
        Sleep, 200
        Send, {PgDn Up}
        Sleep, 1000
        WinActivate, ahk_pid %id2%
        Send, {F11}
        Sleep, 300
        WinActivate, ahk_pid %id1%
        Sleep, 333
        Send, {F1}
}
if pixelcolor = 0xff0000 ; красный. когда он его найдёт в условие выше, то снова заменит на наш старый цвет и будет его ждать
pixelcolor := "0x7F4644" ; меняем на старый
    }
    Send, {Home Down}
    sleep 193
    Send, {Home Up}
    Sleep, 1000
    If (ErrorLevel)
    {
        Send, {F2}
        Sleep, 400
    }
}
sc51::pause    ;  "Numpad3"
return
}