Você pode pesquisar o status WinActive em um loop separado e, em seguida, executar uma ação se a janela ativa for alterada. Como alternativa, você ainda pode usar um loop separado, mas use WinWaitNotActive e WinWaitActive para executar as ações necessárias. Em outras palavras, você verifica qual janela está ativa (obtém a janela ativa no momento) e depois espera que ela não esteja ativa antes de fazer qualquer outra coisa. Uma vez que não está ativo, você verifica a janela ativa novamente, faz algo apropriado se for a janela certa e depois volta a esperar por aquela janela para não estar mais ativa.
Para ativar o loop separado somente quando F3 está habilitado, você pode usar SetTimer para habilitar / desabilitar a execução repetitiva de uma rotina separada, ou apenas usar uma variável compartilhada que é verificada repetidamente, onde o estado da variável compartilhada muda de estado ao mesmo vez que você envia F3 para cima ou para baixo no código que você postou.