AutoHotKey - несколько команд не выполняются

Я использую скрипт AutoHotKey для управления iTunes стандартными клавишами мультимедиа, и он отлично работает, за исключением одного твика, который я пытался добавить к нему. Я хочу, чтобы мультимедийная клавиша "Воспроизведение / Пауза" запустила iTunes, если он еще не открыт, а затем просто начала играть. Я даже добавил задержку, чтобы у нее было время открываться перед командой воспроизведения.
Это код, который я пробовал, но он просто запускает iTunes, и мне нужно нажать клавишу Play/Pause второй раз, чтобы начать играть:

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
}

РЕДАКТИРОВАТЬ: Рабочий код для JJohnston2 ответ ниже:

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
}

1 ответ

Решение

Просто взглянув на код, я не вижу, какое окно первое ControlSend должен отправлять на. Обозначить WinTitle, т.е. ahk_class iTunes для третьего аргумента.

Это, или вместо заявления сна, попробуйте WinWaitActive (возможно, с последующим гораздо более коротким Sleep заявление, если WinWaitActive не полностью делает свое дело).

WinWaitActive оператор предположительно установит последнее найденное окно таким же образом IfWInExist во втором блоке кода, и это единственная причина, по которой я могу думать, что это действительно работает. ControlSend должен отправлять последнее найденное окно, так как ни один не указан явно.

Другие вопросы по тегам