AutoHotkey v1 использует один ярлык в качестве элемента управления переключателем, если l oop действие включено или выключено - PullRequest
0 голосов
/ 19 июня 2020

Я создаю макрос для игры, в которую играю, в которой я могу сидеть и смотреть за терминалом.

Надеюсь, когда я нажму Alt + P it нажимает E на терминале, он прокручивается вниз, чтобы экран мог показать элемент, который нужно щелкнуть мышью, затем щелкает указанную координату и ждет 20 секунд. (повторять до тех пор, пока не нажмите Alt + O , чтобы остановить)


!p::
while toggle==0
    (send e)
    Loop 3
        send {WheelDown}
    send {click,1210,670}
    Sleep, 20000
!o:: toggle=(toggle+1)

Однако он удерживает нажатой клавишу E бесконечно.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Причина, по которой e кажется удерживаемым, состоит в том, что ваш while-l oop выполняет только строку «(send e)». Если вам нужен while-l oop для выполнения более чем одной строки кода, заключите кодовый блок в скобки. Кроме того, если ваши отдельные горячие клавиши не являются одной строкой, вы захотите поставить Return в конце каждой; в противном случае он продолжит выполнение следующего кода горячей клавиши и т. д.

Вот моя непроверенная версия вашего кода. Пожалуйста, дайте мне знать, работает ли это для вас.

!p::
While !toggle
{
    Send , e{WheelDown 3}{click , 1210 , 670}
    Sleep , 20000
}
toggle := !toggle
Return
!o::toggle := !toggle
0 голосов
/ 19 июня 2020

Если мы зададим недостаточно общие вопросы, у нас будет много повторных вопросов. Этот пост имеет более общий заголовок и очень похожий запрос Другая функция при повторном нажатии клавиши

В AutoHotkey v1 используйте «ярлык», отправьте чистый текст, просто используйте его. (спасибо @EJE, напомните, что вы задаете этот вопрос)

^a::Send, you can press ctrl-a send this pure text
^b::Send you can press ctrl-b send this pure text

Проверить документ см. описание Send.

используйте один ярлык Alt- P переключение между двумя условиями с помощью AutoHotkey v1 и v2

; AutoHotkey v1
#NoEnv

global var := 0
SetTimer, subroutine, 1000
!p::
{
    if (var == 1)
    {
        global var := 0
    }
    else
    {
        global var := 1
    }
}

subroutine()
{
    if (var == 1)
    {
        ; when switch to 1
        send, e
        send, {WheelDown}
        send, {click,1210,670}
    }
    else
    {
        ; when switch to 0
        Return

    }
}
; AutoHotkey v2

global var := 0
SetTimer "subroutine", 1000
!p::
{
    if (var == 1)
    {
        global var := 0
    }
    else
    {
        global var := 1
    }
}
Return


subroutine()
{
    if ( var == 1)
    {
        ; when switch to 1
        send "e"
        send "{WheelDown}"
        send "{click,1210,670}"
    }
    else
    {
        ; when switch to 0
        Return

    }
}

использование функции использования двух сочетаний клавиш и перезагрузки

; AutoHotkey v1

#NoEnv

!p::subroutine()
!o::Reload


subroutine()
{
    send e
    send {WheelDown}
    send {click,1210,670}
    Sleep, 1000
    subroutine()
}
; AutoHotkey v2

!p::subroutine()
!o::Reload

subroutine()
{
    send "e"
    send "{WheelDown}"
    send "{click,1210,670}"
    Sleep 1000
    subroutine()
}

использование двух переключателей быстрого доступа с перезагрузкой

; AutoHotkey v2
!p::SetTimer "subroutine", 1000
!o::Reload
subroutine()
{
    ; write your code in here
}

два сочетания клавиш используйте l oop до и привязку переменной

; AutoHotkey v2 
!o::global state := "stop"
global state := "run"
!p::
{
    Loop
    {
    ; write your code in here
    } Until (state == "stop")
    global state := "run"
}
...