Ajuda para identificar a ocorrência de evento.

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

Killin
Posts: 7
Joined: 27 Sep 2021, 18:28

Ajuda para identificar a ocorrência de evento.

Post by Killin » 03 Dec 2023, 11:01

Olá.
Trabalho operando um terminal IBM e escrevi alguns scripts para automatizar algumas tarefas. E para evitar erro na execução dos scripts, que ocorre quando a tela seguinte não é carregada, e também para não demorar tanto na execução dos scripts, eu tenho utilizado a seguinte estratégia. Eu criei uma função dentro do script que copia todo o conteúdo da tela e procura por alguma expressão que deveria aparecer na tela (previamente definida), caso não encontre, a função espera um certo tempo, e verifica novamente, caso encontre a expressão, o script continua sua execução. Ou seja, se o sistema estiver "rápido" o script é executado rapidamente, se o sistema estive "lento", o script aguarda a resposta do sistema, para, então, ser executado. E isso evita erros de o script ser executado antes da resposta do sistema.

Segue abaixo um exemplo dessa função:

Code: Select all

 funcaoCODIGO13E()                  ;função a ser utilizada no script onde é verificada a ocorrência da palavra "CODIGO13E" no corpo do texto copiado da tela do terminal                                       

	{
		Ocorreuoevento := false
		Tick := A_TickCount
	while (Ocorreuoevento = false)
		{
			if ((A_TickCount - Tick) > 10000)
			{
            			msgbox, 0x10, Erro, Tente novamente mais tarde.
            			Reload
			}
        Sleep 50
			Send, {esc 2}
			Send,^a
			sleep, 150
			Send,^c
            Send, {esc 2}
			Sleep, 150
			ClipWait,2
			theData = %clipboard%
			Palavracomparar := theData
			Necessario := "CODIGO01"
			IfInString, Palavracomparar, %Necessario%
			{
				Ocorreuoevento:= true
				sleep,150
				}
			Sleep, 150
			
		}
	} 
[Mod edit: + [code][/code] tags.]

Porém, eu me deparei com um problema que eu não estou conseguindo contornar. A ação de um dos scripts dependerá do que aparecer na tela seguinte. Por exemplo, na tela poderá aparecer somente o "código01", ou o "código01" mais o "código02", ou o "código01" mais o "código03". Se aparecer somente "código01", o script deveria executar a "ação01", se aparecerem o "código01" mais o "código02", o script deveria executar a "ação02", e se aparecerem o "código01" mais o "código03", executar a "ação03". Mas eu não estou sabendo fazer para identificar quando aparece, somente o código01, o código01+código02, ou o código01+código03.

Alguém poderia me ajudar?

RPM
Posts: 4
Joined: 01 Jun 2016, 17:51

Re: Ajuda para identificar a ocorrência de evento.

Post by RPM » 27 Dec 2023, 20:39

O comando IfInstring está descontinuado e é pouco flexível. A combinação do if com a função InStr(), recomendada pela documentação pode atender melhor à sua necessidade. Segue um trecho de código a título de exemplo:

Code: Select all

;somente o código01
if(InStr(texto, "código01") && !InStr(texto, "código02") && !InStr(texto, "código03"))
	MsgBox Executar "ação01"
;código01+código02
if(InStr(texto, "código01") && InStr(texto, "código02"))
	MsgBox Executar "ação02"
;código01+código03
if(InStr(texto, "código01") && InStr(texto, "código03"))
	MsgBox Executar "ação03"

User avatar
Encrypton
Posts: 24
Joined: 10 Feb 2022, 15:21

Re: Ajuda para identificar a ocorrência de evento.

Post by Encrypton » 18 Feb 2024, 07:06

Code: Select all

funcaoCODIGO13E() {
    Ocorreuoevento := false
    Tick := A_TickCount

    while (!Ocorreuoevento) {
        if ((A_TickCount - Tick) > 10000) {
            MsgBox, 0x10, Erro, Tente novamente mais tarde.
            Reload
        }
        Sleep 50
        Send, {esc 2} ; Limpa qualquer input pendente
        Send, ^a       ; Seleciona todo o texto na tela
        Sleep, 150
        Send, ^c       ; Copia o texto selecionado para a área de transferência
        Send, {esc 2} ; Volta ao prompt do terminal
        Sleep, 150

        ClipWait, 2    ; Espera até que o texto seja copiado para a área de transferência
        Palavracomparar := Clipboard  ; Obtém o texto copiado
        Necessario := "CODIGO13E"
        
        IfInString, Palavracomparar, %Necessario% {
            Ocorreuoevento := true
        }
        Sleep, 150
    }
}

Post Reply

Return to “Ajuda e Suporte Geral”