Я новичок здесь, и у меня есть дополнительное разъяснение или мне нужна дополнительная помощь по проблеме из этой темы - Applescript: «не удается получить группу вкладок 1 окна» (El Capitan)
В моей панели предпочтений, в дополнение к наушникам и цифровому выходу, у меня также есть 2 монитора Apple, и я хотел бы выбрать один из них в качестве выхода (а именно, первый в списке).
В основном мне нужна помощь в настройке его решения, чтобы иметь возможность выбрать третий ряд или первый монитор в качестве вывода звука. Или способ сделать это, не зная, как редактировать AppleScript для другой настройки.
Немного поэкспериментировав со сценарием Артура Хаммера, я обнаружил, что строки set deviceselected to "xyz"
представляют собой просто визуальную обратную связь в редакторе сценариев и, похоже, не являются частью реальной функциональности.
Фактическое переключение происходит только между двумя выбранными строками в панели управления; поэтому, если вам просто нужно переключаться между любыми двумя выходами, вы можете просто использовать номера строк.
В этом примере я выделил их как переменные, поэтому вам не нужно копаться в скрипте, чтобы изменить нужные строки…
Поскольку у вас более 2 выходов, при первом переключении он не обязательно будет идти с/на правильное устройство, но после этого.
Например, если вы хотите переключиться между выходами 3 и 4, но в данный момент выбран 2, первое изменение будет с «не 3», а не «равно 3» [надеюсь, вы понимаете это запутанное объяснение]
(*
Applescript to toggle between two sound outputs by Line number, ¬
as they appear in the Sound Control Panel. Based on code by ¬
Arthur Hammer http://apple.stackexchange.com/a/209434/85275
*)
set outputA to 3 --change this to the actual 'line number' of your first desired output
set outputB to 4 --change this to the actual 'line number' of your second desired output
--the rest of the script will use these vales as a switch
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.sound"
end tell
tell application "System Events"
tell application process "System Preferences"
repeat until exists tab group 1 of window "Sound"
end repeat
tell tab group 1 of window "Sound"
click radio button "Output"
if (selected of row outputA of table 1 of scroll area 1) then
set selected of row outputB of table 1 of scroll area 1 to true
else
set selected of row outputA of table 1 of scroll area 1 to true
end if
end tell
end tell
end tell
--tell application "System Preferences" to quit
--remove the comment '--' tag above to make the control panel quit afterwards, leave for testing.
Возможно, небольшое графическое пояснение — используя приведенный выше сценарий с outputA = 3 и outputB = 4, теперь я могу переключаться между цифровым выходом и TonePort UX2.
Еще одно замечание: номера строк не обязательно должны быть последовательными, я мог бы так же легко переключаться между внутренними динамиками и TonePort, используя строки 1 и 4.
@Tetsujin - спасибо за это решение. Работает отлично. Я использую его для переключения между моим встроенным звуком (когда я кодирую для работы) и моей картой Universal Audio Apollo (когда я занимаюсь созданием музыки). Поскольку устройство UAudio также предоставляет превосходную опцию входного микрофона, я также добавил очевидный переключатель входа после вашего раздела «Выход»:
click radio button "Input"
if (selected of row outputA of table 1 of scroll area 1) then
set selected of row outputB of table 1 of scroll area 1 to true
else
set selected of row outputA of table 1 of scroll area 1 to true
end if
В Мохаве я обычно вручную переключаю устройство вывода с помощью регулятора громкости в меню, поэтому я автоматизирую то же самое с помощью приведенного ниже AppleScript, который выполняет переключение в зависимости от того, что отмечено/снято.
Если вы используете это с некоторыми пусковыми установками, то для этого подхода не требуются разрешения для настроек.
ignoring application responses
tell application "System Events" to tell process "SystemUIServer"
click menu bar item 5 of menu bar 1 -- May need to change the index as needed
end tell
end ignoring
-- Optional, but just to avoid the 5-6sec delay
delay 0.25
do shell script "killall System\\ Events"
tell application "System Events" to tell process "SystemUIServer"
tell menu bar item 5 of menu bar 1
set device1 to menu item "Name of Device 1" of menu 1
set device2 to menu item "Name of Device 2" of menu 1
if (value of attribute "AXMenuItemMarkChar" of device1) as string is "✓" then
click device2
else
click device1
end if
end tell
end tell
Я не могу угадать общий AppleScript, но мне нравится и я использую Automator для записи необходимых шагов.
Откройте этот инструмент и создайте новый рабочий процесс. Затем нажмите кнопку записи. Затем вы можете записать последовательность, используемую для открытия Системных настроек, выбрать нужную панель, выбрать нужный звук и затем завершить запись.
Обычно вы можете просматривать действия и обрезать их или добавлять задержки, если это необходимо, с помощью Automator, и вам не нужно знать, как программировать строки и элементы в Applescript.
ребята! Сценарий ниже был подготовлен мной, и ему не важно, сколько у вас на самом деле устройств. Это сработает в любом случае:
tell application "System Preferences" to ¬
reveal anchor "output" of pane id "com.apple.preference.sound"
tell application "System Events"
tell application process "System Preferences"
repeat until exists tab group 1 of window "Sound"
delay 0.1
end repeat
tell tab group 1 of window "Sound"
set DevicesCount to count rows of table 1 of scroll area 1
repeat with n from 0 to DevicesCount
if (selected of row n of table 1 of scroll area 1) then
set SelectedDevice to n
end if
end repeat
if (SelectedDevice < DevicesCount) then
set NewDevice to SelectedDevice + 1
set selected of row NewDevice of table 1 of scroll area 1 to true
else
set selected of row 1 of table 1 of scroll area 1 to true
end if
end tell
end tell
end tell
quit application "System Preferences"
bmike
КодБрауэр