Похоже, вам на самом деле не нужен цикл (??).
Вы просто хотите запустить 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
}
}