Autohotkey KeyWait, как использовать ИЛИ (||)

0

макрос выглядит работающим без "ИЛИ MButton". как я могу использовать оба?

Loop
{
    KeyWait, RButton OR MButton
    KeyWait, RButton OR MButton, D
    CoordMode, Pixel, Window
    PixelSearch, FoundX, FoundY, 258, 762, 258, 762, 0x000402, 0, Fast RGB
    If ErrorLevel
        Break
    If ErrorLevel = 0
    {
        Send, {2}
        Sleep, 200
    }
}
Marco Polo
источник
1
Вы хотите, чтобы PixelSearch выполнялся, после или во время нажатия одной из кнопок?
user3419297
Глядя на [документацию], вы не можете, поскольку единственный ожидаемый параметр - это один ключ. Скорее всего, вам понадобится независимый цикл для проверки общих нажатий клавиш и проверки всякий раз, когда вы хотите среагировать.
Seth
если нажмите кнопку, отправьте 2. если нажмите кнопку, отправьте 2. Что я хочу сделать. PixelSearch является контролем для {2} бесплатно или нет. Что за петля?
Marco Polo

Ответы:

1

Похоже, вам на самом деле не нужен цикл (??).

Вы просто хотите включить RButton или же MButtonи выполнить что-то один раз за клик?

~RButton::MyFunction()  ; Remove ~ to make these calls block the clicks from passing through
~MButton::MyFunction()  ; otherwise, leave in place to block clicks and send "2" instead

MyFunction() {
    PixelSearch, FoundX, FoundY, 258, 762, 258, 762, 0x000402, 0, Fast RGB
    If ErrorLevel
        Return

    Send, 2         ; Else if ErrorLevel was = 0, send "2"... shouldn't need brackets unless sending a special key
    ;Sleep, 200     ; Sleep only needed if executing lots of sends in a row or similar
}

Я предпочитаю использовать функции (выше), чтобы код был более модульным.

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

~RButton::  ; These will execute sequential code below...
~MButton::

    PixelSearch, FoundX, FoundY, 258, 762, 258, 762, 0x000402, 0, Fast RGB
    If ErrorLevel
        Return

    Send, 2         ; Else if ErrorLevel was = 0, send "2"... shouldn't need brackets unless sending a special key
    ;Sleep, 200     ; Sleep only needed if executing lots of sends in a row or similar

Return

Если вы хотите отправить "2" несколько раз, пока MButton или же RButton Вы можете использовать цикл (что-то вроде вашего исходного кода). Это будет выполняться до тех пор, пока нажата и удерживается та или иная кнопка:

~RButton::MyFunction()  ; Remove ~ to make these calls block the clicks from passing through
~MButton::MyFunction()  ; otherwise, leave in place to block clicks and send "2" instead

MyFunction() {
    ; Check to see if button is still down each loop iteration...
    While GetKeyState("P", "RButton") || GetKeyState("P", "MButton") {
        PixelSearch, FoundX, FoundY, 258, 762, 258, 762, 0x000402, 0, Fast RGB
        If ErrorLevel {
            Sleep 10
            Continue
        }

        Send, 2         ; Else if ErrorLevel was = 0, send "2"... shouldn't need brackets unless sending a special key
        Sleep, 200      ; Sleep only needed if executing lots of sends in a row or similar

    } 
}
JJohnston2
источник
вау человек ты знаешь что делаешь
Marco Polo