Prior to upgrading to Yosemite, I used Keyboard Maestro to invoke this Applescript with a shortcut:
tell application "System Preferences"
reveal pane "com.apple.preferences.Bluetooth"
end tell
tell application "System Events" to tell process "System Preferences"
click button 6 of window 1
end tell
quit application "System Preferences"
It behaved just as expected, toggling bluetooth whenever I pressed my shortcut.
It's no longer working with Yosemite though, I'm sure it has something do with Apple changing the System Preferences pane or the order of icons, but I'm not sure what to change. The Keyboard Maestro shortcut is invoking the file, because I hear the sound I had assigned to it, so it's definitely something with the script.
Here's what I'm getting under "Replies" when I run this in Apple's Script Editor:
tell application "System Preferences"
reveal pane "com.apple.preferences.Bluetooth"
--> missing value
end tell
tell application "System Events"
click button 6 of window 1 of process "System Preferences"
--> button 6 of window "Bluetooth" of application process "System Preferences"
end tell
tell application "Script Editor"
quit
end tell
Updates:
It's definitely not the pane that's causing the problem. To debug, I changed the code to:
tell application "System Preferences"
set current pane to pane id "com.apple.preferences.bluetooth"
end tell
And it correctly opens the Bluetooth pane. Now all that's left is to figure what kind of action I want to run on this pane:
Update on solutions: Thanks fartheraway! Both of markhunte's and fartheraway's solutions worked for me, but I chose the latter because it was more similar to my code. I guess you can't choose two "best" answers. I wish there'd be a solution to make it work without bringing up the preferences pane (visually) like my script did with Mavericks, but these two should be good enough.
Best Answer
Updated/Better Answer:
1) This new script doesn't flash.
2) For reasons unbeknownst to man and logic (or just me), applescript sometimes/almost-always fails to Turn Bluetooth Off, if the System Preference window is in the background. Instead of turning off, what actually occurs is that Bluetooth immediately re-enable itself, so the pane is in a fresh state: it's ON, but no connections.
To overcome that, one way to to bring SysPref to the front, as in the original answer. Or, run a loop that click the button again (or for a 3rd time) until Bluetooth is really off. That's why there are two variables and a loop in the script. This should make the script more reliable.
statName
variable records the original status.Loop
will continue clicking the button until status has changes.failSafe
makes sure the script will not run forever in case of error. All at the cost of aesthetics of the code.Original Answer:
From Accessibility Inspector:
button 3
in the the no.6 item on the list. The 6th button is no.11 in the list. When you callbutton 6
Preference Window goes Genie. I guess Mavericks had all the buttons bunched up at the front.