Я использую скрипт 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, должно быть, отправляет данные в последнее найденное окно, поскольку ни одно из них не указано явно.