Ajuda para encerrar evento com uma MsgBox.

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

Moderator: Gio

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

Ajuda para encerrar evento com uma MsgBox.

23 Mar 2022, 20:07

Olá,
Estou tentando escrever um script contendo uma função que copia um texto, utilizando Ctrl+a, e verifica se nesse texto existe uma determinada palavra, se existir essa palavra, o script deveria continuar para a ação seguinte, caso contrário, ele deveria esperar um certo tempo e tentar novamente em seguida.

Porém, se o evento não ocorrer, ou seja, a determinada palavra não for localizada, o script entrará num loop infinito.

Portanto, gostaria que me ajudassem a encontrar uma maneira, de que quando a determinada palavra não fosse encontrada, após um certo tempo, após 10 segundos, por exemplo, fosse exibida uma mensagem: "tente novamente mais tarde".

Eu consegui fazer com que a função parasse após certo tempo, mas não consegui fazer que fosse exibida uma mensagem em seguida.

Aqui está o script (se houver outra forma de chegar no resultado que eu gostaria, por favor, me ajudem):

Code: Select all

!ç::
funcaoatencao()
return

funcaoatencao()                  ;função a ser utilizada no script                                       

	{
		Ocorreuoevento := false
		Tick := A_TickCount
	while (Ocorreuoevento = false)
		{
			if ((A_TickCount - Tick) > 10000)
            continue	
			;~ MsgBox, tente novamente em instantes                        ;eu gostaria que aparecesse essa mensagem após o término do tempo e encerrasse o script
        Sleep 50
			Send, {esc 2}
			Send,^a
			sleep, 100
			Send,^c
            Send, {esc 2}
			Send, {left}
			Sleep, 100
			ClipWait,2
			theData = %clipboard%
			Palavracomparar := theData
			Necessario := "ATENÇAO!!!"
			IfInString, Palavracomparar, %Necessario%
			{
				Ocorreuoevento:= true
				sleep,300
				}
			Sleep, 300
			
		}
	}
[Mod edit: [code][/code] tags added.]

Espero que tenha entendido.
User avatar
Gio
Posts: 1248
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda para encerrar evento com uma MsgBox.

24 Mar 2022, 08:20

Bom dia Killin.

As condicionais (if) também podem condicionar blocos de códigos (múltiplas linhas entre chaves { e }).

Além disso você deve usar o comando Break para terminar loops (continue só pula para a próxima execução do loop).

Mas quando quiser terminar o script inteiro, você deve usar o comando ExitApp.

Exemplo:

Code: Select all

!ç::
funcaoatencao()
return

funcaoatencao()                  ;função a ser utilizada no script                                       

	{
		Ocorreuoevento := false
		Tick := A_TickCount
	while (Ocorreuoevento = false)
		{
			if ((A_TickCount - Tick) > 10000)
			{
            			msgbox, 0x10, Erro, Palavra não encontrada. Tente novamente mais tarde.
            			ExitApp	
			}
        Sleep 50
			Send, {esc 2}
			Send,^a
			sleep, 100
			Send,^c
            Send, {esc 2}
			Send, {left}
			Sleep, 100
			ClipWait,2
			theData = %clipboard%
			Palavracomparar := theData
			Necessario := "ATENÇAO!!!"
			IfInString, Palavracomparar, %Necessario%
			{
				Ocorreuoevento:= true
				sleep,300
				}
			Sleep, 300
			
		}
	}
Espero ter ajudado, se ainda tiver alguma dúvida sobre isso, basta postar abaixo.
Killin
Posts: 7
Joined: 27 Sep 2021, 18:28

Re: Ajuda para encerrar evento com uma MsgBox.

24 Mar 2022, 11:39

Muito obrigado mais uma vez Gio.

Substituí o ExitApp por Break (pois não queria o aplicativo fechasse).
Killin
Posts: 7
Joined: 27 Sep 2021, 18:28

Re: Ajuda para encerrar evento com uma MsgBox.

25 Mar 2022, 11:20

Me deparei com outro problema. Teria como me ajudar novamente?

Minha intenção era de que, após ser satisfeita uma condição (a de verificar a existência de uma determinada palavra num texto copiado), uma ação deveria ser executada; caso contrário, seria exibido uma mensagem de erro, e a ação seguinte do script não seria executado (porém, sem ser usado o comando ExitApp, pois não quero fechar o sript).

Do jeito que ficou, o "break" atua somente na função "funcaoatencao()", mas não para o script, ele continua e executa a instrução seguinte.

tipo assim:

Code: Select all

!ç::
funcaoatencao()                
send, a condição foi satisfeita                                  ; eu gostaria que essa ação não fosse executada, caso a função "funcaoatencao()" terminasse em "break".
return

funcaoatencao()                  ;função a ser utilizada no script                                       

	{
		Ocorreuoevento := false
		Tick := A_TickCount
	while (Ocorreuoevento = false)
		{
			if ((A_TickCount - Tick) > 10000)
			{
            			msgbox, 0x10, Erro, Palavra não encontrada. Tente novamente mais tarde.
            			ExitApp	
			}
        Sleep 50
			Send, {esc 2}
			Send,^a
			sleep, 100
			Send,^c
            Send, {esc 2}
			Send, {left}
			Sleep, 100
			ClipWait,2
			theData = %clipboard%
			Palavracomparar := theData
			Necessario := "ATENÇAO!!!"
			IfInString, Palavracomparar, %Necessario%
			{
				Ocorreuoevento:= true
				sleep,300
				}
			Sleep, 300
			
		}
	}
[Mod edit: [code][/code] tags added.]

Desde já, agradeço.
Killin
Posts: 7
Joined: 27 Sep 2021, 18:28

Re: Ajuda para encerrar evento com uma MsgBox.

25 Mar 2022, 19:36

Acho que encontrei uma solução, ao invés de usar "break", usei "Reload".

Ficou assim:

Code: Select all

!ç::
funcaoatencao()                
send, a condição foi satisfeita                                  
return

funcaoatencao()                  ;função a ser utilizada no script                                       

	{
		Ocorreuoevento := false
		Tick := A_TickCount
	while (Ocorreuoevento = false)
		{
			if ((A_TickCount - Tick) > 10000)
			{
            			msgbox, 0x10, Erro, Palavra não encontrada. Tente novamente mais tarde.
            			Reload	
			}
        Sleep 50
			Send, {esc 2}
			Send,^a
			sleep, 100
			Send,^c
            Send, {esc 2}
			Send, {left}
			Sleep, 100
			ClipWait,2
			theData = %clipboard%
			Palavracomparar := theData
			Necessario := "ATENÇAO!!!"
			IfInString, Palavracomparar, %Necessario%
			{
				Ocorreuoevento:= true
				sleep,300
				}
			Sleep, 300
			
		}
	}
[Mod edit: [code][/code] tags added.]

Obrigado.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 6 guests