Alguns problemas de resposta usando dois scripts de “sequência de chaves” no Autohotkey

1

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.

    
por litu16 22.11.2016 / 15:57

1 resposta

1

Para controlar se o mouse clica na posição correta no    janela da direita, você pode usar isso:

F1::
ARtoolPresetTopY := 125
ARtoolPresetGapY := 29

Ypos := ARtoolPresetTopY + (ARtoolPresetGapY * 8)
MsgBox, %Ypos%  ; Press Enter for closing this MsgBox.

; Click, 13, %Ypos%
; or
ControlClick, x13 y%Ypos%, ahk_class ArtRage 3

MouseMove, 13, %Ypos%, 0 ; this line is only needed for getting the mouse position and the name of the control you want click:
MouseGetPos, MouseX, MouseY, WindowUnderMouse, ControlUnderMouse
WinGetTitle, title, ahk_id %WindowUnderMouse%
WinGetClass, class, ahk_id %WindowUnderMouse%

MsgBox, MouseX = %MouseX%'nMouseY = %MouseY%'n'nWinTitle = %title%'nWinClass = ahk_class %class%'n'nControlUnderMouse = %ControlUnderMouse%
return
  • Em vez de clicar, você pode usar ControlClick (então você não Não precisa BlockInput).

  • Tente também substituir "b ::" e "1 ::" por " $ b :: " e " $ 1 :: ". (Teclado ganchos sempre têm precedência).

  • Veja também: Depurando um script .

por 23.11.2016 / 10:23