Parece que você não precisa realmente de um loop (??).
Você quer apenas acionar RButton
ou MButton
e executar algo uma vez por clique?
~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
}
Eu prefiro usar funções (acima) para que o código seja mais modular.
Você pode fazer a mesma coisa sem eles usando a execução sequencial típica de teclas de atalho (abaixo):
~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
Se você quisesse enviar "2" repetidamente enquanto MButton
ou RButton
estivesse inativo, poderia usar um loop (algo como seu código original). Isso seria executado enquanto um ou outro botão fosse clicado e mantido pressionado:
~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
}
}