Отправка клавиши при нажатии другой клавиши не приводит к спаму нажатой клавиши - PullRequest
1 голос
/ 15 апреля 2020

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

$c::
    send {c down}
    sendQ()
    send {c up}
return
sendQ()
{
    if GetKeyState("c","P") {
        sendinput {q}
        sleep 2222
    }
}

, она работает, но не так, как задумано. Он отправляет cq с интервалом 2222, например cq..cq..cq. Мне нужен такой результат: cqcccccccqccccccccqcccc. Есть ли способ спамить 'c', нажимая q с интервалом?

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Подделка многопоточности в ахк может дать требуемый результат. Таким образом, сценарий может отправить как c, так и q в их отдельных потоках после ожидания в течение указанного времени.

#Persistent

~c::
    Send, q ;~ for initial cq
    SetTimer, sendC, 100 ;~ frequency of sending c
    SetTimer, sendQ, 2222 ;~ frequency of sending q
return

;~ Sending c
sendC:
    Send, c
return

;~ Sending q
sendQ:
    Send, q
return
1 голос
/ 16 апреля 2020

Это похоже на работу:

isCPressed := 0

c::
    Send c
    if (!isCPressed) { ; Avoid resetting the timer
        SetTimer, SendQ, 2222
    }
    isCPressed := 1
Return

c Up::
    SetTimer, SendQ, Delete
    isCPressed := 0
Return

SendQ() {
    SendInput q
}

В большинстве случаев вы также можете заменить

c::
    Send c

на

~c::
...