Eu tenho dois scripts em AHK, ambos acionados por "seqüências de teclas" (b pressionado duas vezes) e (1 pressionado duas vezes), aqui está o código
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetTitleMatchMode RegEx ; matchs apps windows names using RegEx
; Delay A between key sequence triggers
ARkeySeqDelayA := 250
; if Presets Panel is in 100%
; Y axis top in tool presets is 122 pixels
; Y axis gap between tool presets is 29 pixels
ARtoolPresetTopY := 125
ARtoolPresetGapY := 29
return
#If WinActive("ahk_class ArtRage 3")
b::
if Keyb_presses > 0 ; SetTimer already started, so we log the keypress instead.
{
Keyb_presses += 1
return
}
; Otherwise, this is the first press of a new series. Set count to 1 and start
; the timer:
Keyb_presses = 1
SetTimer, Keyb, -250 ; Wait for more presses within a 250 millisecond window.
return
Keyb:
if Keyb_presses = 1 ; The key was pressed once.
{
BlockInput, MouseMove
Send {b}
sleep 80
MouseClick, left, 195, 55
Sleep 200
MouseClick, left, 200, 85
BlockInput, MouseMoveOff
}
else if Keyb_presses = 2 ; The key was pressed twice.
{
BlockInput, MouseMove
Send {b}
sleep 80
MouseClick, left, 195, 55
Sleep 200
MouseClick, left, 200, 110
BlockInput, MouseMoveOff
}
; Regardless of which action above was triggered, reset the count to
; prepare for the next series of presses:
Keyb_presses = 0
return
1::
if Key1_presses > 0 ; SetTimer already started, so we log the keypress instead.
{
Key1_presses += 1
return
}
; Otherwise, this is the first press of a new series. Set count to 1 and start
; the timer:
Key1_presses = 1
SetTimer, Key1, -250 ; Wait for more presses within a 250 millisecond window.
return
Key1:
if Key1_presses = 1 ; The key was pressed once.
{
BlockInput, MouseMove
MouseClick, left, 13, ARtoolPresetTopY
BlockInput, MouseMoveOff
}
else if Key1_presses = 2 ; The key was pressed twice.
{
BlockInput, MouseMove
MouseClick, left, 13, ARtoolPresetTopY + (ARtoolPresetGapY * 8)
BlockInput, MouseMoveOff
}
; Regardless of which action above was triggered, reset the count to
; prepare for the next series of presses:
Key1_presses = 0
return
mas de alguma forma quando eu acionar o script "1", e alguns segundos depois eu quero usar o script "11", ele não funcionará a menos que eu tenha clicado em qualquer lugar anteriormente (manualmente), parece um script anterior do AHK de alguma forma ainda está em execução e precisa que eu termine clicando em mim em qualquer lugar.
Também quando eu acionar o script "bb", e um segundo depois eu quero usar o script "1" ele não vai funcionar, novamente parece que de alguma forma o AHK ainda está rodando o script previuos ou algo assim, e eu tem que fazer um click meu eu, e só então ele vai funcionar o script "1". Então eu não posso rodar o script "bb" e "1" um após o outro (que é algo que eu sempre faço, muito necessário) sem eu ter que fazer alguns cliques de mim mesmo entre eles, como posso evitar isso ??
depois de mais um teste, eu substituo todas as partes em execução do script com apenas
Run C:\Users\myname\Desktop\AR4 bb.exe ; the same script done in a macro recorder
click up left
e tenho notado que o problema persiste, assim como o script está fazendo a diferenciação entre os simples e duplos pressionamentos de tecla que estão interferindo no script para serem executados duas vezes consecutivamente. Se eu pressionar "b" espere um segundo, mas não faça nenhum clique do mouse sozinho e pressione "bb" (b duas vezes) ele irá executar o "b", mas se eu fizer alguns cliques do mouse antes, ele irá executar o "bb". por que isso está acontecendo?
o que posso fazer ?? Existe algum comando que eu possa adicionar para tornar este script mais responsivo?
Obrigado Advanced.