У меня есть скрипт, который определяет, воспроизводит ли QuickTime Player что-то в целом , но мне также нужен способ определить, воспроизводит ли Safari что-то конкретное, например Netflix или YouTube, но если бы он вообще мог обнаружить какую-либо игровую активность, это было бы лучше.
on mySay(p, myMessage)
if application "QuickTime Player" is running then
tell application "QuickTime Player" to set isQTplaying to ¬
((documents whose playing is true) is not {}) as boolean
else
set isQTplaying to false
end if
if isQTplaying then
return
else
set myVolumeBefore to output volume of (get volume settings)
set volume output volume p
say myMessage
set volume output volume myVolumeBefore
end if
end mySay
Вот один из способов проверить, воспроизводится ли видео в Safari .
Пример кода AppleScript :
if (do shell script "pmset -g | grep -m 1 'displaysleep'") ¬
contains "display sleep prevented by Safari" then
-- # Video is playing.
-- # Do something when video is playing.
else
-- # Video is not playing.
-- # Do something else when video is not playing.
end if
Примечания:
Протестировано в macOS Catalina .
Предложение contains "display sleep prevented by Safari"
может фактически только содержать, contains "Safari"
и это будет работать. Если у вас, например, Firefox воспроизводит видео, вы должны использовать его только firefox
в этом пункте и только Google Chrome
для Google Chrome .
Вообще говоря, круглые скобки вокруг do shell script
команды не нужны, за исключением этого варианта использования, позволяющего использовать символ продолжения строки, который ¬
должен быть размещен там, где он есть.
tell application "System Events" to if exists (buttons of group 2 of toolbar 1 of window 1 of application process "Safari" whose description contains "Mute This Tab") then return true
для все, что производит звуковой сигнал в Safari .if (do shell script "pmset -g | grep -m 1 'sleep'") contains "firefox" then
или для Google Chrome contains "Google Chrome"
, однако для Safari это не является окончательным и сообщает только sleep prevented by coreaudiod
при использовании 'sleep'
, и почему я дал вам решение для сценариев пользовательского интерфейса в предыдущем комментарии.pmset -g
в Терминале , чтобы увидеть, как он меняется, когда различные браузеры / приложения меняют свой параметр , когда видео и / или просто звук воспроизводится / не воспроизводится, и посмотреть, что лучше всего протестировать. В своем вопросе вы упомянули Netflix , YouTube и Safari и никогда не упоминали другие браузеры/приложения в качестве цели ответа. Между тем, что я включил в свой ответ, и комментариями к bmike, я уверен, что код можно изменить, чтобы приспособиться.Хотел опубликовать окончательное решение, которое я в итоге использовал. На основе примера @user3439894.
on mySay(p, myMessage)
if (do shell script "pmset -g | grep -m 1 'displaysleep'") ¬
does not contain "prevented" then
set myVolumeBefore to output volume of (get volume settings)
set volume output volume p
say myMessage
set volume output volume myVolumeBefore
end if
end mySay
Солнечный Майк
Стив Торренс
без холма
Стив Торренс
пользователь3439894
bmike
Стив Торренс
Стив Торренс