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

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

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

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: Рабочий код согласно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для третьего аргумента.

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

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

Связанный контент