AutoHotKey: varios comandos no se ejecutan

AutoHotKey: varios comandos no se ejecutan

Estoy usando un script AutoHotKey para controlar iTunes con claves multimedia estándar y funciona muy bien, excepto por un ajuste que intenté agregarle. Quiero que la tecla multimedia Reproducir/Pausar inicie iTunes si aún no está abierta y luego comience a reproducir. Incluso agregué un retraso para que tuviera tiempo de abrirse antes del comando de reproducción.
Este es el código que probé pero simplemente inicia iTunes y tengo que presionar la tecla Reproducir/Pausa por segunda vez para comenzar a reproducir:

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
}

EDITAR: Código de trabajo porJJohnston2Responda abajo:

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
}

Respuesta1

Con solo echar un vistazo al código, no veo a qué ventana ControlSendse supone que debe enviar el primero. Designe un WinTitle, es decir, ahk_class iTunespara el tercer argumento.

Eso, o en lugar de una declaración de sueño, inténtelo WinWaitActive(posiblemente seguido de una Sleepdeclaración mucho más corta si WinWaitActiveno funciona por completo).

Una WinWaitActivedeclaración presumiblemente establecería la última ventana encontrada de la misma manera IfWInExistque en el segundo bloque de código, que es la única razón por la que puedo pensar que esto realmente funciona. ControlSend debe enviarse a la última ventana encontrada ya que no se especifica ninguna explícitamente.

información relacionada