Запустите зеркальное отображение экрана в Центре управления с помощью AppleScript
Я хочу запустить Screen Mirroring с моего MacBook на AppleTV с помощью сочетания клавиш. Я использовал функцию записи Automator («Watch Me Do»), чтобы записать три необходимых щелчка (открыть Центр управления, нажать «Зеркальное отображение экрана», нажать на Apple TV). Это результирующий код:
-- Click the “Control Centre” menu bar item.
delay 0.608482
set timeoutSeconds to 2.0
set uiScript to "click menu bar item 2 of menu bar 1 of application process \"Control Centre\""
my doWithTimeout(uiScript, timeoutSeconds)
-- Click the “<fill in title>” button.
delay 0.84342
set timeoutSeconds to 2.0
set uiScript to "click UI Element 6 of group 1 of window \"Control Centre\" of application process \"Control Centre\""
my doWithTimeout(uiScript, timeoutSeconds)
-- Click the “<fill in title>” button.
delay 1.017773
set timeoutSeconds to 2.0
set uiScript to "click UI Element 2 of group 1 of window \"Control Centre\" of application process \"Control Centre\""
my doWithTimeout(uiScript, timeoutSeconds)
on doWithTimeout(uiScript, timeoutSeconds)
set endDate to (current date) + timeoutSeconds
repeat
try
run script "tell application \"System Events\"
" & uiScript & "
end tell"
exit repeat
on error errorMessage
if ((current date) > endDate) then
error "Can not " & uiScript
end if
end try
end repeat
end doWithTimeout
Теперь проблема в том, что когда я выполняю этот скрипт, на втором этапе щелкается не Screen Mirroring , а Focus , элемент над ним. Так как-то линияset uiScript to "click UI Element 6 of group 1 of window \"Control Centre\" of application process \"Control Centre\""
не работает, как ожидалось. Я попытался заменить элемент пользовательского интерфейса 6 другими номерами. Большинство из них приводят к щелчку по Focus , другие отключают Bluetooth или AirDrop…
Как может быть, что записанное действие дает другой результат при воспроизведении? Есть идеи? Я на macOS Ventura, кстати.
1 ответ
Изменить: решение для Ventura 13.0.1
После некоторого тестирования на виртуальной машине Ventura я обнаружил, что многое изменилось между версиями, поэтому то, что я изначально опубликовал в качестве потенциального решения, не будет работать.
В вашем сценарии изменитьset uiScript to "click UI Element 6 of group 1 of window \"Control Centre\" of application process \"Control Centre\""
к
set uiScript to "perform action 1 of UI Element 6 of group 1 of window \"Control Centre\" of application process \"Control Centre\""
Работал для меня на Ventura (мне просто нужно было изменить написание «Центр» на «Центр»), но это, вероятно, потому, что у нас могут быть установлены разные системные языки.
В этой другой ветке описываются некоторые изменения в Ventura для решения этой проблемы.
У меня было много проблем с applescript и взаимодействием с элементом Screen Mirroring в раскрывающемся списке Центра управления. А также попытаться использовать функцию записи Automator, чтобы сделать что-то подобное. Элемент Screen Mirroring в раскрывающемся списке Центра управления технически является флажком, поэтому действие «щелчок» должно работать над ним, но по какой-то причине этого не происходит. В то время как одно и то же действие «щелкнуть», похоже, работает с другими элементами в том же раскрывающемся списке, например «фокус» или «Bluetooth». Проблема также существует на Биг-Суре и Монтерее. Я обнаружил, что вам нужно «выполнить действие 2» (Монтерей) и «выполнить действие 1» (Биг-Сур), чтобы «щелкнуть» по нему в раскрывающемся списке Центра управления.
Я не на Вентуре, но это работает для меня в Монтерее.
set uiScript to "perform action 2 of UI Element 6 of window \"Control Center\" of application process \"ControlCenter\""
В разных версиях системы все меняется, поэтому мне пришлось удалить часть «группы 1», чтобы эта строка работала в моей системе. Также пришлось изменить написание «Центр управления» (не знаю, почему написание отличается) на «Центр управления» и удалить пробел в «Центре управления» в части «процесса приложения».
С вашим текущим кодом это может сработать. Я изменил «щелчок» на «выполнить действие 2» и вместо выбора элемента пользовательского интерфейса по номеру я использовал имя. Однако я оставил то же написание «Центр управления».
set uiScript to "perform action 2 of UI Element \"Screen Mirroring\" of group 1 of window \"Control Centre\" of application process \"Control Centre\""
Вполне возможно, что «выполнить действие 2» может даже не работать на Вентуре, поскольку оно изменилось с «выполнить действие 1» на Биг-Суре, поэтому оно могло измениться снова.
Вот фрагмент рабочего решения для Big Sur и Monterey. Я добавил раздел, который может подойти для Ventura. Из того, что я понял из вашего кода, похоже, что Screen Mirroring находится внутри «группы 1», которая отличается от Monterey.
Изменить: это не сработает для Вентуры
tell application "System Events"
tell its application process "ControlCenter"
click menu bar item "Control Center" of menu bar 1
tell its window "Control Center"
-- Monterey
if exists checkbox "Screen Mirroring" then
tell its checkbox "Screen Mirroring"
perform action 2
delay 1
end tell
else
-- big sur
-- "action 1" instead of "action 2"
if exists (checkbox "Screen Mirroring" of group 1 of group 1) then
tell its checkbox "Screen Mirroring" of group 1 of group 1
perform action 1
delay 1
end tell
end if
-- ventura??
-- "Screen Mirroring" is inside a "group 1"
if exists (checkbox "Screen Mirroring" of group 1) then
tell its checkbox "Screen Mirroring" of group 1
perform action 2
delay 1
end tell
end if
end if
end tell
end tell
end tell
Я надеюсь, что между Монтереем и Вентурой не так уж много изменилось, и это сработает. Запустите его из системного редактора скриптов для проверки.
Если вы хотите увидеть мой полный пример, перейдите на github здесь. Сценарий также может выбрать устройство из раскрывающегося списка Screen Mirroring. Я только что получил решение, работающее для Big Sur и Monterey, около недели назад после долгих разочарований и испытаний.