AutoHotKey – Vários comandos não sendo executados

AutoHotKey – Vários comandos não sendo executados

Estou usando um script AutoHotKey para controlar o iTunes com teclas de mídia padrão e está funcionando muito bem, exceto por um ajuste que tentei adicionar a ele. Quero que a tecla de mídia Reproduzir/Pausar inicie o iTunes, se ainda não estiver aberto, e comece a reproduzir. Eu até adicionei um atraso para que ele tivesse tempo de abrir antes do comando play.
Este é o código que tentei, mas ele apenas inicia o iTunes e preciso pressionar a tecla Reproduzir/Pausar uma segunda vez para começar a jogar:

Media_Play_Pause::
IfWinNotExist, ahk_class iTunes
{
Run %ProgramFiles%\iTunes\iTunes.exe
Sleep, 4000
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

IfWinExist, ahk_class iTunes
{
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

EDIT: Código de trabalho porJJohnston2responda abaixo:

Media_Play_Pause::
IfWinNotExist, ahk_class iTunes
{
Run %ProgramFiles%\iTunes\iTunes.exe
WinWaitActive, ahk_class iTunes, ,2
Sleep, 2000
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

IfWinExist, ahk_class iTunes
{
ControlSend, ahk_parent, {SPACE}  ; play/pause toggle
return
}

Responder1

Apenas olhando para o código, não vejo para qual janela o primeiro ControlSenddeveria estar enviando. Designe um WinTitle, ou seja, ahk_class iTunespara o terceiro argumento.

Isso, ou em vez de uma instrução sleep, tente WinWaitActive(possivelmente seguido por uma Sleepinstrução muito mais curta, se WinWaitActivenão funcionar totalmente).

Presumivelmente, uma WinWaitActiveinstrução definiria a última janela encontrada da mesma forma IfWInExistque no segundo bloco de código, que é a única razão pela qual consigo pensar que isso realmente funciona. ControlSend deve ser enviado para a última janela encontrada, pois nenhuma foi especificada explicitamente.

informação relacionada