Questão Como quebrar um loop de auto-chave quando o aplicativo é fechado


Eu tenho um autohotkey para inserir algumas teclas pressionadas repetidamente em um script antigo. Eu não sei de antemão quanto tempo vai durar, então eu tenho esse script:

#NoEnv
^m::

Loop 
{
if (BreakLoop = 1)
  break 
  SEND, 3
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  sleep, 100
}

Esc::
BreakLoop = 1
return

E eu espero que termine, e entre no escape quando terminar (o temporizador está lá para que eu possa realmente escapar).

Assim que o script é concluído, a janela fecha e eu gostaria de usar esse evento para quebrar o loop de auto-chave, mas ainda não descobri como.


1


origem




Respostas:


Você pode usar WinActive ou WinExist para verificar o fechamento da janela. Você também pode usar uma instrução while para combinar as instruções de quebra condicional, em vez de precisar de um if / break separado. Eu também me certificaria e inicializaria a variável BreakLoop caso você execute o script várias vezes sem reiniciá-lo totalmente.

#NoEnv
^m::
setTitleMatchMode, 2               ; inexact title match
myID := WinExist(myWinTitle:="A")  ; put WinSpy title details here
BreakLoop = 0
While !BreakLoop and WinActive("ahk_id" myID)
{
  SEND, 3
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  SEND, {Enter}
  sleep, 100
}

Esc::
BreakLoop = 1
return

1



Estou tentando usar o código, imaginei usar o janela ativa seria o que eu queria, mas o script não começou. Estou esquecendo de algo? Eu gostaria de executar o script até que a janela ativa fecha, usei o código de exemplo acima e substitui "title ahk_exe my.exe" por "A". Obrigado por ver isso comigo :). - Jóhann
Remova a declaração não na frente do erro lógico WinActive ... Você quer que o loop seja executado enquanto a janela está ativa. No entanto, você não pode usar A para a janela, a menos que você leia o ID primeiro. Caso contrário, o loop sempre encontrará uma janela ativa, será apenas uma janela diferente. - JJohnston2
Atualizei o bloco de código acima para refletir as alterações observadas no meu comentário anterior. Isso lerá a janela ativa e verificará a janela até que ela não esteja mais ativa. - JJohnston2