Entendi. Neste caso a solução é praticamente a mesma: Use o SetTimer. A única diferença é que você vai ligar ele quando a rotina condicionada terminar e desligar quando ela começar.
Também pode ser o caso de usar uma variável para identificar no loop que a rotina está "em espera".
Exemplo (veja os comentários nas linhas do código):
Code: Select all
#Persistent ; Este comando é necessário se o script não tiver uma GUI ou hotkeys, pois do contrário ele terminará assim que estiver idle.
PAUSA := 0 ; Iniciamos o valor da variável em 0 (para executar a primeira vez assim que a outra condição for satisfeita).
Loop
{
testa_condicao1()
if ((condicao1 = 1) AND (PAUSA = 0)) ; Passamos a ter uma segunda condição para executar a ação: a variável PAUSA tem que estar em 0 (ela já estará em 0 no início do script, então a primeira execução independe dela)
{
executa_acao1()
}
}
executa_acao1()
{
Global PAUSA
Tooltip, Exemplo
Sleep 2000
ToolTip, De rotina
Sleep 2000
ToolTip, Qualquer
PAUSA := 1 ; Dentro da rotina colocamos a variável PAUSA em 1. Ao fazer isso, impedimos a rotina de executar novamente.
SetTimer, DESLIGAR_PAUSA, 30000 ; Mas logo em seguida, ainda nesta rotina, ligamos um Timer de 30 segundos que vai zerar de novo a variável PAUSA.
}
Return
DESLIGAR_PAUSA:
PAUSA := 0 ; Aqui zeramos de novo a variável PAUSA.
SetTimer, DESLIGAR_PAUSA, Off ; e depois desligamos o Timer de 30 segundos.
Return
Você pode replicar essa lógica para a outra rotina (use uma variável diferente, tipo PAUSA_2, para que os timers sejam independentes).
EDIT: Tinha esquecido de colocar a variável PAUSA com global. Foi corrigido no código acima.