Autohotkey - como sobrescrever o estado do teclado

0

Existe uma maneira de informar uma ação de autohotkey (sub-rotina) para liberar a tecla Alt , apesar de seu gatilho ser Alt + X ?? aqui está o meu código ...

!x::
sleep 100
it does some clicks and drags here (work fine)
return

mas apesar do sleep 100 no meu código, às vezes quando pressiono o Alt + X se eu manualmente deixar o alt pressionado o script fará um Alt Click , ao invés de apenas um Click que faz uma coisa completamente diferente .

Eu sei que eu poderia aumentar o atraso (sleep 100), ou configurar o AHK para esperar até que a tecla alt seja liberada, mas nada disso ajudaria porque esse script será executado várias vezes continuamente, então eu prefiro segurar o delay Alt e pressione / baixo o x várias vezes para executá-lo várias vezes continuamente.

Portanto, preciso de uma maneira de bloquear temporariamente o teclado ou definir o script para liberar a tecla alt, para que o autofechar não reconheça que meu dedo ainda esteja pressionando a tecla Alt durante a execução do script várias vezes.

Eu preciso de algo parecido com isso ...

BlockInput, MouseMove
BlockInput, On

btw eu tentei os dois, eles não funcionam.

EDITAR > > > > >

Esta é a minha função para clicar e arrastar ...

AR4clickDnABmoveClickUpCDfn(ParamA, ParamB, ParamC, ParamD)
{
    If AR4togWorkbMode
    {
        AR4workbModeFn()    ;   Since this fn is used to click n drag panels, after disabling AR4workbMode I won't enable it back, cuz is supposed I need to see the Panel I'm draging afterward
        AR4togWorkbMode := !AR4togWorkbMode ;   So AR4retWorkbMode doesn't need to be set, but AR4togWorkbMode does
        Sleep 200
    }

        MouseGetPos X, Y
        BlockInput, On
        ;   BlockInput, MouseMove
        Sleep 50

        MouseMove, ParamA, ParamB
        Click down
        Sleep 50

        Loop 10
        {
            MouseMove, -1, 1, 100, R
        }

        Sleep 40
        MouseMove, ParamC, ParamD, 100
        Click Up

        BlockInput, Off
        ;   BlockInput, MouseMoveOff
        MouseMove %X%, %Y%
}

Então eu em outra sub-rotina !x execute uma sub-rotina que irá clicar em um painel e chamar a função click and drag , para arrastar o painel, é isso ...

#If WinActive("ahk_class ArtRage 3") or WinActive("ahk_class ToolWindow")

<!x::
;   Lalt & x::
If !AR4togToolSetsNear  ;   will run the first time the hotkey is pressed cuz the toggle var is not set yet
{
    Sleep 220
    AR4clickDnABmoveClickUpCDfn(AR4toolSetsX0 + AR4toolSetsSetGapXX, AR4toolSetsY0 + 10, AR4toolSetsNearX, AR4toolSetsNearY)
    AR4togToolSetsNear := !AR4togToolSetsNear
    Sleep 20
    WinActivate, ahk_class ArtRage 3
}
Else
{
    Sleep 220
    AR4clickDnABmoveClickUpCDfn(AR4toolSetsNearX, AR4toolSetsNearY, AR4toolSetsX0 + AR4toolSetsFarDifXX, AR4toolSetsY0 + AR4toolSetsFarDifYY)
    AR4togToolSetsNear := !AR4togToolSetsNear
    Sleep 20
    WinActivate, ahk_class ArtRage 3
}
Return

#If

MAS, uma vez que este gatilho de sub-rotina contém Lalt se eu pressionar e segurar Alt enquanto pressiona e libera X várias vezes para chamar a sub-rotina várias vezes. Então o AHK sript irá enviar Alt Click and Drag e não apenas Click and Drag o primeiro irá rodar de painel, enquanto o último irá movê-lo, eu quero movê-lo, não rodá-lo, mas por outro lado eu preciso pressionar e segure a tecla ALT para executar a sub-rotina várias vezes. Como posso fazer isso?

Como posso criar o AHK para ver o teclado Alt como uma versão enquanto ele é pressionado manualmente por mim?

Espero que algum super usuário possa me ajudar, obrigado.

    
por litu16 02.12.2016 / 23:25

2 respostas

0

aqui está um exemplo de como usar o blockinput

link

^!p::
KeyWait Control  ; Wait for the key to be released.  Use one KeyWait for each of the hotkey's modifiers.
KeyWait Alt
BlockInput On
; ... send keystrokes and mouse clicks ...
BlockInput Off
return

Acabei de adicionar o KeyWait Alt

    
por 07.12.2016 / 01:34
1
; Trigger an action (subroutine) by releasing the left Alt key, 
; without losing its native function as modifier key:

LAlt up:: 
if (A_PriorKey = "LAlt")
    Send a               ; do sth
return


; Trigger another action by releasing the left Alt key 
; in a key combination:

LAlt & x:: Send b       ; do sth else
; or:
; <!x:: Send b          ; <! means LAlt 
    
por 03.12.2016 / 11:46