Почему мой код печатает двойную букву "k" в финале? AutoHotKey (ахк) - PullRequest
0 голосов
/ 29 марта 2020
fly := True 

Start()
    {
        Global fly
        fly := True
        While (fly == True)
            {
                Send, {Shift down}{W down}
                Sleep, 10
            }
    }

End()
    {
        Global fly
        fly := False
        Send, {Shift up}{W up}
    }

MButton::
Send, {K}
Start()

+XButton2::
Send, {K}
End()

Return

Я не знаю почему, но каждый раз, когда я останавливаю программу, в финале выводится двойная буква «к», и я понятия не имею, почему это происходит, может кто-нибудь указать мне, где ошибка? большое Вам спасибо!! ^ V ^

1 Ответ

0 голосов
/ 29 марта 2020

Вам не хватает Return с, чтобы остановить выполнение кода.
Каждая метка горячей клавиши должна заканчиваться Return, чтобы она не перетекла к чему-то нежелательному (в вашем случае, к следующей горячей клавише). label).

Ваша секция auto-execute также просачивается, но в данном случае это не имеет значения, так как выполнение кода встречает только функции перед остановкой с помощью метки горячей клавиши. .

Кроме того, рекомендуется использовать SendInput вместо обычной отправки.
И перенос K в { } ничего не даст вам, и это может даже привести к нежелательному поведению в особые случаи (см. документацию по этому вопросу).
Перенос символа в { } должен выполняться только для экранирования символов со специальным значением в команде отправки, таких как + (shift) или ! (Alt ) (также прочитайте документацию для полного объяснения этого).


Вот пример добавления пропущенных Return s в ваш скрипт:

fly := True 
return

Start()
{
    Global fly
    fly := True
    While (fly == True)
    {
        SendInput, {Shift down}{W down}
        Sleep, 10
    }
}

End()
{
    Global fly
    fly := False
    SendInput, {Shift up}{W up}
}

MButton::
    SendInput, K
    Start()
Return

+XButton2::
    SendInput, K
    End()
Return
...