Applescript audio input/output set if device is present - macos

I have this script which currently will set audio inputs/outputs to a plantronics headset, but if the device is not plugged in the script will error. I need it to return text saying
"Plug the device in"
if it isn't detected within the audio settings.
Here is the script:
tell application "System Preferences" to activate
tell application "System Preferences"
reveal anchor "input" of pane id "com.apple.preference.sound"
end tell
tell application "System Events" to tell process "System Preferences"
tell table 1 of scroll area 1 of tab group 1 of window 1
select (row 1 where value of text field 1 is "Plantronics C725")
end tell
end tell
tell application "System Preferences" to activate
tell application "System Preferences"
reveal anchor "output" of pane id "com.apple.preference.sound"
end tell
tell application "System Events" to tell process "System Preferences"
tell table 1 of scroll area 1 of tab group 1 of window 1
select (row 1 where value of text field 1 is "Plantronics C725")
end tell
end tell

You must include your instruction "select..." into a try/end try block. I assume that you just have to do it for the "input" tab, because if "input" is OK, then the headset is connected and output tab should also be OK.
Replace the instruction :
select (row 1 where value of text field 1 is "Plantronics C725")
by :
try
select (row 1 where value of text field 1 is "Plantronics C725")
on error
display alert "headset not connected !"
return
end try
You can also change your code to repeat in case of error, but if you have an issue with your headset, the script may repeat forever !

Related

Need accessibility help on mac os sound output using applescript

set outputB to 2 --change this to the actual 'line number' of your second desired output
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
I have this apple script from Arthur Hammer. It works perfect if I'm in script editor. When I export it as an application and try to open it from my desktop it only gives me the error "System Events got an error: Output 1 is not allowed assistive access. (-25211)".
I verified that sys pref > security & privacy > privacy > accessibility > Output 1 and script editor are enabled. I've restarted my computer as well but I still can only get that error.
Any ideas how to fix it?

How to click the checkbox of a System Preferences UI element by name

I've got a piece of Applescript that is currently functional and clicks a checkbox in System Prefs > Security & Privacy > Contacts. However, right now it only works because I am explicitly stating the row of the app that I'm targeting (in this case, row 2). This works fine for now, but if in the future I end up with a different app order in that pane, it will break. Is there a way to loop through all the items of a given window and say "if UI element is Alfred 4.app, then click the checkbox"? I'd like to harden the code so that it will work regardless of which order the apps are listed in this pane.
set appName to "Alfred 4.app"
tell application "System Preferences"
activate
set the current pane to pane id "com.apple.preference.security.Privacy_Contacts"
delay 1
end tell
tell application "System Events"
click checkbox 1 of UI element appName of row 2 of table 1 of scroll area 1 of group 1 of tab group 1 of window "Security & Privacy" of application process "System Preferences"
end tell
Following script is tested on the Catalina:
set appName to "Alfred 4.app"
tell application "System Preferences"
activate
reveal anchor "Privacy_Contacts" of pane id "com.apple.preference.security"
end tell
delay 1
tell application "System Events" to tell process "System Preferences"
repeat with aRow in (rows of table 1 of scroll area 1 of group 1 of tab group 1 of window "Security & Privacy")
if name of UI element 1 of aRow is appName then
click checkbox 1 of UI element 1 of aRow
exit repeat
end if
end repeat
end tell

Using AppleScript to uncheck HDR in system preferences

I have a 4K HDR Monitor, and sometimes Macbook causes the colors to be washed, the fix is to Disable and then Re-Enable HDR.
I am trying to create an AppleScript to then incorporate that in Automator to do so.
I was able to get some traction but not able to identify how to do the actual uncheck and identify the group.
Here is what i had so far:
tell application "System Preferences"
activate
delay 2
set the current pane to pane id "com.apple.preference.displays"
delay 2
tell application "System Events"
click checkbox "High Dynamic Range" of group 2 of window "LG HDR 4K" of application process "System Preferences"
end tell
quit end tell
Here is the error I get:
error "System Events got an error: Can’t get group 2 of window \"LG HDR 4K\" of application process \"System Preferences\". Invalid index." number -1719 from group 2 of the window "LG HDR 4K" of application process "System Preferences"
here is a screenshot of the page I am trying to uncheck and re-check HDR:
Any advice would be appreciated, thank you.
I don't have a high-def display, so I don't see this particular option, but if I run the following code, I get a full list of all the subelements of the window:
tell application "System Preferences"
activate
delay 2
set the current pane to pane id "com.apple.preference.displays"
delay 2
tell application "System Events"
tell window 1 of application process "System Preferences"
entire contents
end tell
end tell
end tell
Subelements you are interested in seem to have the following form:
radio button "Scaled" of tab group 1 of window "Built-in Retina Display" of application process "System Preferences" of application "System Events"
Note that it includes a tab group 1 entry (referring to the fact that you are on the 'Display' tab of the four tabs available which is missing from your chain.
The Display pane UI layout has changed a bit in macOS Monterey, and now looks like this:
Display Prefs UI Layout
In my case I wanted to enable HDR on my second monitor, so using the following code I was able to get Script Editor to test whether the High Dynamic Range checkbox was true or false, and if false to enable it:
tell application "System Preferences"
activate
delay 1
set the current pane to pane id "com.apple.preference.displays"
delay 1
tell application "System Events"
click button "Display Settings…" of window "Displays" of application process "System Preferences" of application "System Events"
delay 1
tell sheet 1 of window 1 of application process "System Preferences"
select row 2 of outline 1 of scroll area 1
set theCheckbox to checkbox "High Dynamic Range, Automatically adjust the display to show high dynamic range content."
tell theCheckbox
set checkboxStatus to value of theCheckbox as boolean
if checkboxStatus is false then click theCheckbox
end tell
end tell
end tell
end tell
If I wanted to select a different monitor, I would change the index of "row 2" in this line:
select row 2 of outline 1 of scroll area 1 of sheet 1 of window "Displays" of application process "System Preferences" of application "System Events"

Syntax errors in AppleScript for Mavericks

I'm tring to select "Soundflower (2ch)" as my audio output using this script:
tell application "System Preferences"
activate
set the current pane to pane id "com.apple.preference.sound"
get the name of every anchor of pane id "com.apple.preference.sound"
reveal anchor "output" of current pane
select (row 1 of table 1 of scroll area 1 of tab group 2 current pane)
end tell
It gives the error :
Syntax Error: Expected "," but found number
for "row 1"
What is the correct format?
I also tried:
tell application "System Preferences"
activate
set the current pane to pane id "com.apple.preference.sound"
get the name of every anchor of pane id "com.apple.preference.sound"
reveal anchor "output" of current pane
select (row, 1 of table, 1 of "scroll area", 1 of "tab group", 2 of current pane)
end tell
but got
Syntax Error: Can’t get 1 of table. Access not allowed.
How do I do this?
Try:
tell application "System Preferences"
activate
set myPane to pane id "com.apple.preference.sound"
set the current pane to myPane
tell myPane
name of every anchor -- {"output", "input", "effects"}
reveal anchor "output"
end tell
end tell
-- Use this script as a wrapper for GUI Scripting statements when you are confident that GUI Scripting is available and enabled or that the user knows how to enable it if necessary
activate application "System Preferences"
tell application "System Events"
tell process "System Preferences"
select row 1 of table 1 of scroll area 1 of tab group 1 of window 1
end tell
end tell

How to AppleScript the launching of sound.profPane?

I have this script
tell application "System Preferences"
activate
set the current pane to pane id "com.apple.preference.sound"
reveal anchor "Output" of pane id "com.apple.preference.sound"
end tell
The problem is that it first goes to the general configuration, with all those icons, only then, it focuses on sound. This create a quick and annoying flicker. I am only interested in the sound pane.
Is there nay way I can write a script that'll show JUST the sound pane without that flickering?
thanks!
You can just use the reveal command directly:
tell application "System Preferences"
activate
reveal anchor "output" of pane id "com.apple.preference.sound"
end tell
If you are using UI scripting, the activate command can also be left out:
tell application "System Preferences"
reveal anchor "output" of pane id "com.apple.preference.sound"
end tell
tell application "System Events" to tell process "System Preferences"
tell table 1 of scroll area 1 of tab group 1 of window 1
if selected of row 1 then
set selected of row 2 to true
else
set selected of row 1 to true
end if
end tell
end tell

Resources