Se você está se referindo a manter pressionada a tecla para essa ação e ter algum atraso antes que a ação seja ativada (versus manter pressionada alguma outra tecla, como um modificador), você poderia fazer algo com GetKeyState
como já mencionado.
O seguinte conjunto de código pode ser inserido ou chamado como uma função de cada definição de tecla de atalho. Você pode alterar as configurações de atraso conforme necessário para adequar-se ao que está tentando fazer (ou pode não fazer exatamente o que deseja fazer e pode ser complicado se não for o que você estava pensando, mas a postagem original era bem vago).
Insira este código no início de cada definição de tecla de acesso e ele exigirá que você mantenha essa tecla de acesso pressionada por um determinado período de tempo antes de ser ativada, caso contrário, o pressionamento de tecla será enviado regularmente. Você também precisará adicionar um $
na frente da definição de tecla de atalho para que a instrução Send
não acione novamente a definição de tecla de acesso duas vezes seguidas e cause uma execução imediata (já que essa função precursora enviará a mesma chave como a tecla de atalho, se o usuário pressiona brevemente a tecla e não a mantém pressionada).
Como as variáveis de tecla de atalho são genéricas, você também pode colocar isso em uma chamada de função separada, para não precisar repetir o código e, em seguida, apenas chamar a função para cada tecla de atalho. Talvez isso lhe dê algumas ideias, mesmo que não seja exatamente o que você quer.
$a::
{
; make these global or static as desired so they don't have to be reassigned for each function call
holdDelay:=300 ; time to wait before activation (or conversely, must release before this time to send a keystroke)
repeatDelay:=700 ; max time to detect a repeat event--must be bigger than holdDelay or won't work
; if we just triggered this key last time and it's been less than the repeat delay,
; bypass the hold-down check and skip directly to desired function for moving the mouse
If Not ((A_ThisHotkey=A_PriorHotkey) && (A_TimeSincePriorHotkey<repeatDelay)) {
trimmedHotkey:=Trim(A_ThisHotkey, "$") ; get rid of preceding $ so we can detect and send just the keystroke
startTick:=A_TickCount ; init timer
While GetKeyState(trimmedHotkey, "P") ; Loop while key is pressed down, otherwise exit
&& !(heldDown:=(A_TickCount-startTick)>holdDelay) ; check for helddown/timeout (user held the key down)
Sleep 10 ; wait a few ms...
If !heldDown { ; if user didn't hold the key down, send it back as a keystroke
SendInput % trimmedHotkey
Return
}
}
; Rest of the code goes here