O seu loop não tem uma condição de saída que o faça parar.
loop
{
while sendingKeys
{
sendinput c
sleep, 700
}
sleep 100
}
Você colocaria esse código para ser executado imediatamente (em vez de estar em uma sub-rotina de botão). Você deve inicializar o envio de chaves antes do loop para ser o padrão para a inicialização do programa. O loop externo ainda não tem uma condição de saída, ele é executado para sempre até que o Escape dispare um evento ExitApp (que pode funcionar muito bem no seu caso).
sendingKeys := False ; make the user toggle first before loop turns on
Na sub-rotina de botões, você deve simplesmente alternar a variável sendingKeys para ir entre true e false, que inicia o loop interno ou interrompe o loop interno quando a variável muda de estado.
button:
sendingKeys := not sendingKeys
return
Quando o loop interno não está sendo executado, o loop externo apenas pesquisa e continua em execução até que o loop interno inicie a execução novamente.