AutoHotKey - como focar em uma janela novamente após executar algumas ações

0

Eu uso o AHK 1.1 para definir o capslock como uma tecla de atalho para o modo de tela cheia do Google ArtRage (modo workbench), porque o ArtRage não permite que eu defina o CapsLock como uma tecla de atalho, mas estou bastante acostumado para usar essa chave para fazer isso em muitos programas, então pensei que o AHK poderia me ajudar.

Eu tentei isso e funcionou:

;   AR4 Toggle Workbench Mode
If WinActive("ahk_class ArtRage 3")

Capslock::
Sleep 20
Send {SC037 Down}   ;   NumpadMult
Sleep 10
Send {SC037 Up} ;   NumpadMult
Sleep 90
WinActivate, ahk_class ArtRage 3
return

#If

O script funciona bem, mas de alguma forma a janela do ArtRage perde o foco, quer dizer, eu ainda vejo a janela do ArtRage, mas notei que ela perde o foco, porque se eu quiser rodar outra tecla de atalho do AHK (que executa apenas #If WinActive("ahk_class ArtRage 3") ) imediatamente após a execução do script acima, ele não detectará a janela do ArtRage como aberta, portanto, ela não será executada, a menos que eu clique manualmente na janela do ArtRage.

Eu tentei focar novamente depois que o Capslock (modo de alternar Workbench) foi concluído, mas WinActivate, ahk_class ArtRage 3 não voltou a focar na janela do ArtRage, não há outra maneira de refocar uma janela no AHK?

EDITADO > > > Como posso colocar um IfWinExist("ahk_class ArtRage 3") no final de uma ação? Porque eu não posso simplesmente executá-lo em cima do meu script AHK porque ele sempre se concentraria em ArtRage, mesmo se eu estou trabalhando em outros aplicativos certo ?, Eu tentei isso, mas não está em uma sintaxe adequada, você poderia por favor postar um exemplo ??

#If WinActive("ahk_class ArtRage 3")

Capslock::
Send {SC037 Down}   ;   NumpadMult
Sleep 30
Send {SC037 Up} ;   NumpadMult
Sleep 30
IfWinExist("ahk_class ArtRage 3")
    WinActivate, ahk_class ArtRage 3
return

#If
    
por litu16 30.11.2016 / 00:24

1 resposta

0

Tente isso (em primeiro lugar, como script autônomo):

;   AR4 Toggle Workbench Mode
#If WinActive("ahk_class ArtRage 3")

    Capslock::
    KeyWait, Capslock   ;  wait until Capslock is released 
    Sleep 20
    Send {NumpadMult}
    Sleep 90
    If !WinActive("ahk_class ArtRage 3")  ;  means: IfWinNotActive
    {
        Loop
        {           
            ;  Which window becomes active in this case?
            WinGetTitle, ActiveTitle, A
            WinGetClass, ActiveClass, A
            ToolTip, Active Window:'n%ActiveTitle%  ahk_class %ActiveClass%
            WinActivate, ahk_class ArtRage 3
            Sleep 50
            If WinActive("ahk_class ArtRage 3")
            {
                ToolTip
                break
            }                   
        }
    }
    return

#If

Esc:: ExitApp
    
por 30.11.2016 / 10:23