Script funciona intermitente

Tire suas dúvidas sobre programação em AutoHotkey
jeffersonabreu
Posts: 2
Joined: 11 Jul 2018, 10:29

Script funciona intermitente

25 Jul 2018, 23:54

As vezes funciona e outras não no jogo. Já tentei de tudo, mudei de funções de click e sleep 1000. Mesmo assim não funcionar sempre que abro. Alguém teria alguma ideia o que poder ser? Ou de melhorias do script. Agradeço por qualquer ajuda.

Code: Select all

#WinActivateForce
#Warn
#SingleInstance
#MaxThreadsPerHotkey 2
SendMode "Input"
DetectHiddenText "On"
#MaxThreadsBuffer "On"
ProcessSetPriority  "High"




;Variavel global
;---------------
vWinID := ""
vWinTile := ""
;----------------

; programa principal
;--------------------
Gosub WinSetupStuff
Gosub Macro1
Return
;------------------

;Funções do programa principal
;-------------------------------------------------
!w:: ;<-- Setup window id
WinSetupStuff:
Suspend (true)
While !GetKeyState("F8"){
  	ToolTip "Left Click on your game window and press F8 to grab the window id"
}
KeyWait("F8")

Suspend (false)
ToolTip
vWinID := WinGetID("A")
vWinTile := WinGetTitle("A")

Return


Macro1:
;MsgBox "ID janela " vWinID
;MsgBox "Title janela" vWinTile
WinActivate  "ahk_id" vWinID

While WinExist("A") = vWinID {

Send "{Blind}{LAlt down}"
Sleep Random(1, 10)
Send "{Blind}{LButton down}"
Sleep Random(1, 10)
Send "{Blind}{LButton up}"
Sleep Random(1, 10)

}

Reload
Return

F12:: Pause
User avatar
Gio
Posts: 505
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Script funciona intermitente

26 Jul 2018, 11:50

Bom dia Jeffersonabreu.

Seja bem-vindo ao fórum da comunidade do AutoHotkey.

Vejo que o seu script utiliza uma linguagem da versão 2. Este versão ainda está em beta, portanto, pode ser que o que eu diga não funcione.

Mas acredito que a falta de confiabilidade na execução esteja na própria lógica da rotina. Veja bem:

O script usa uma hotkey alt + w para chamar uma rotina que espera que você clique na janela do jogo e pressione F8. Quando você faz isso, ele coleta alguns dados da janela ativa (acreditanto que o fato de você ter clicado na janela do jogo tenha efetivamente ativado-a sendo que o clique pode não ativar ou demorar para ativar a janela). Depois, ele opera nessa janela que estava ativa na hora do F8, mandando comandos de teclas com pausas entre eles enquanto a janela ativa for a janela que estava ativa quando o F8 for pressionado. As pausas do comando Sleep são em milésimos de segundos, portanto, Random(1,10) vai dar uma pausa sempre menor que 10 milésimos de segundo.

Pois bem. Pensando um pouco nessa rotina, posso ver como ela pode funcionar para enviar os comandos de teclas a uma janela do jogo. Porém, vejo que para que o script funcione da forma esperada, ele depende de algumas coisas serem verdade (por exemplo, você tem que ter apertado F8 quando a janela do jogo estava efetivamente ativa). Assim, para adicionar confiabilidade na execução do script, você terá que reescrevê-lo de forma a rotina não dependa dessas coisas.

Existem algumas formas mais confiáveis que você pode utilizar para coletar os dados da janela do jogo, como descobrir o nome da janela do jogo usando o Window Spy e depois programar a obtenção do WinID com base no nome certo, eliminado o passo do F8. Também teria que mudar loop while para uma rotina que fica aguardando a janela estar ativa e reinicia os comandos (ao invés de terminar a rotina abruptamente quando a janela muda) ou que checa se a janela está ativa e reinicia os comandos.

Acredito que vale a pena dar uma estudada nos comandos WinActivate e WinWaitActive, bem como WinActive.

Se precisar de alguma ajuda com algum desses comandos, sinta-se livre para perguntar :thumbup:
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
jeffersonabreu
Posts: 2
Joined: 11 Jul 2018, 10:29

Re: Script funciona intermitente

26 Jul 2018, 21:13

Gio,
Obrigado pelas dicas. Vou tentar implementar essas funções. O Window Spy posso achar a onde? Pois estou iniciando e faz menos de um mês que estou estudando ^^
User avatar
Gio
Posts: 505
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Script funciona intermitente

27 Jul 2018, 09:42

O Window Spy é um script que permite a você ver uma série de informações sobre a tela atualmente ativa. Ele serve para, entre outras coisas, descrobrir o ClassNN dos controles, bem como as classes e os nomes das janelas, e etc. O script já vem junto no pacote de instalação do AutoHotkey v1.1 (não sei se vem também no da versão 2.0, pois ainda está em beta). Para acessá-lo, basta executar algum script (que não seja do tipo que termina imediatamente) e depois clicar com o botão direito no ícone de H verde que fica no tray (no canto inferior direito da tela, na barra do windows) e escolher Window Spy.

A janela que se abre é always on top (ou seja, fica sempre visível, mesmo que a janela ativa seja outra). Ela exibe as informações da tela atualmente ativa e dos controle onde o mouse estiver encima (além de outras informações).

É uma ferramenta muito útil para quem vai programar interação com janelas.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 0 guests