макрос выглядит работающим без "ИЛИ 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
    }
}

1 ответ1

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

    } 
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .