Alternar Bluetooth AppleScript no funciona en Yosemite

Antes de actualizar a Yosemite, utilicé Keyboard Maestro para invocar este Applescript con un atajo:

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" 

Se comportó como se esperaba, alternar el bluetooth cada vez que presioné mi atajo.

  • ¿Cómo archivar el correo en Outlook 2016 con un atajo?
  • AppleScript para leer todas las notifications en el Centro de notifications OSX 10.10 Yosemite
  • Haga doble clic en AppleScript
  • ¿Cómo puedo escribir un AppleScript que, cuando se ejecute, se conectará a una networking WIFI específica si está disponible?
  • AppleScript: ¿Cómo get time sin segundos? Alternativamente, ¿cómo eliminar el text en medio de la cadena?
  • No se puede ejecutar 'mostrar notificación' usando osascript en una session de tmux
  • Sin embargo, ya no funciona con Yosemite, estoy seguro de que tiene algo que ver con que Apple cambie el panel de preferences del sistema o el order de los icons, pero no estoy seguro de qué cambiar. El atajo Maestro del keyboard está invocando el file, porque escucho el sonido que le asigné, por lo que definitivamente es algo con el guión.

    Esto es lo que obtengo en "Respuestas" cuando ejecuto esto en el Editor de scripts de Apple:

     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 

    Actualizaciones:

    Definitivamente no es el panel el que está causando el problema. Para depurar, cambié el código a:

     tell application "System Preferences" set current pane to pane id "com.apple.preferences.bluetooth" end tell 

    Y abre correctamente el panel de Bluetooth. Ahora todo lo que queda es determinar qué tipo de acción quiero ejecutar en este panel:

    enter image description here

    Actualización sobre soluciones: ¡ Gracias de antemano! Las soluciones de markhunte y fartheraway funcionaron para mí, pero elegí esta última porque era más similar a mi código. Supongo que no puedes elegir dos "mejores" respuestas. Desearía que hubiera una solución para hacerlo funcionar sin mostrar el panel de preferences (visualmente) como lo hizo mi script con Mavericks, pero estos dos deberían ser lo suficientemente buenos.

  • ¿Es posible desactivar un atajo de keyboard pnetworkingeterminado para un carácter especial, sin el uso de software de terceros?
  • File-paths en iCloud: Tilde (~) dentro de las routes. ¿Cuál es el significado?
  • Ampliando el omnibar en Safari 8
  • ¿Cómo puedo evitar que mi Mac se actualice automáticamente a High Sierra?
  • Carpetas de usuario de enlace simbólico: ¿puedo conservar los icons originales de la barra lateral?
  • ¿Cómo puedo hacer que mi tarjeta microSD se pueda escribir?
  • 5 Solutions collect form web for “Alternar Bluetooth AppleScript no funciona en Yosemite”

    Actualizado / Mejor respuesta:

    1) Este nuevo script no parpadea.

    2) Por razones desconocidas para el hombre y la lógica (o solo para mí), AppleScript a veces / casi siempre falla al desactivar Bluetooth , si la window de Preferences del sistema está en segundo plano. En lugar de desconectarse, lo que ocurre en realidad es que el Bluetooth se vuelve a habilitar inmediatamente, por lo que el panel está en un estado nuevo : está ENCENDIDO, pero no hay conexiones.

    Para superar eso, una manera de llevar a SysPref al frente, como en la respuesta original. O ejecute un ciclo que click el button nuevamente (o por tercera vez) hasta que Bluetooth esté realmente apagado. Es por eso que hay dos variables y un bucle en el script. Esto debería hacer que el script sea más confiable. statName variable statName registra el estado original. Loop continuará haciendo clic en el button hasta que el estado cambie. failSafe se asegura de que el script no se ejecute para siempre en caso de error. Todo a costa de la estética del código.

     tell application "System Events" tell process "System Preferences" activate end tell tell application "System Preferences" set current pane to pane "com.apple.preferences.Bluetooth" end tell tell process "System Preferences" set statName to name of button 3 of window 1 as string set failSafe to 0 repeat until statName is not name of button 3 of window 1 as string ¬ or failSafe is 10 click button 3 of window 1 set failSafe to failSafe + 1 delay 0.1 end repeat end tell tell application "System Preferences" quit end tell end tell 

    Respuesta Original:

     tell application "System Preferences" activate --Change 1/2 reveal pane "com.apple.preferences.Bluetooth" end tell tell application "System Events" to tell process "System Preferences" click button 3 of window 1 --Change 2/2 end tell quit application "System Preferences" 

    Desde el inspector de accesibilidad :

    enter image description here

    button 3 en el ítem no.6 en la list. El 6º button es el nº 11 en la list. Cuando llamas al button 6 Ventana de Preferences va a Genie. Supongo que Mavericks tenía todos los botones agrupados en el frente.

    Para activar o desactivar el modo simple, no es necesario verificar primero el estado.

      property thePane : "com.apple.preferences.bluetooth" tell application "System Preferences" activate set the current pane to pane id thePane --delay 1 end tell --- tell application "System Events" tell application process "System Preferences" try click button "Turn Bluetooth Off" of window "Bluetooth" on error click button "Turn Bluetooth On" of window "Bluetooth" end try end tell end tell 

    dile a la aplicación "Preferences del sistema" que salga

    Aquí está mi respuesta:

     tell application "System Preferences" reveal pane id "com.apple.preferences.Bluetooth" -- activate set the current pane to pane id "com.apple.preferences.Bluetooth" try tell application "System Events" to tell process "System Preferences" click button "Turn Bluetooth Off" of window "Bluetooth" click button "Turn Bluetooth Off" of sheet 1 of window "Bluetooth" of application process "System Preferences" of application "System Events" end tell delay 1 on error tell application "System Events" to tell process "System Preferences" click button "Turn Bluetooth On" of window "Bluetooth" quit end tell end try end tell 

    Aprendí mucho aquí, ¡espero que esta contribución ayude a alguien también! Descubrí que usar "inicio" en lugar de "activar" abrirá la aplicación de forma visible, pero no como la window en primer plano. El otro truco, o al less "algo bueno que aprendí recientemente era posible", es usar un ciclo de repetición vacío para esperar a que se cargue la window (y que exista el button) en lugar de un valor de "retraso", que también uso para verificar el cambio funcionó antes de mostrar una notificación. El rest de mi código se trata de conservar el estado de la Preference del Sistema si ya estaba abierto, o salir de él, de lo contrario.

      set bundleID to "com.apple.systempreferences" -- Check for System Preferences running already tell the application "System Events" to set runningApps to (bundle identifier of every application process) if bundleID is in runningApps then set stayOpen to true else set stayOpen to false end if tell application id "com.apple.systempreferences" -- Problem with this setting is that the toggle doesn't work if the prefPane is open in the background — the window /must/ be visible if not (stayOpen) then launch -- If it's already running, save the current prefPane for later if (stayOpen) then set prevPane to current pane set current pane to pane id "com.apple.preferences.bluetooth" end tell tell the application "System Events" -- An empty repeat loop to keep checking for the window -- Here I am lazy and don't use the identifier repeat until window "Bluetooth" of process "System Preferences" exists end repeat tell window "Bluetooth" of process "System Preferences" if button "Turn Bluetooth Off" exists then -- Click and wait for it to change, then send a notification click button "Turn Bluetooth Off" repeat until button "Turn Bluetooth On" exists end repeat display notification "Bluetooth Off" else click button "Turn Bluetooth On" repeat until button "Turn Bluetooth Off" exists end repeat display notification "Bluetooth On" end if end tell end tell tell application id "com.apple.systempreferences" if (stayOpen) then if prevPane is not missing value then set current pane to prevPane else if not (stayOpen) then quit end if end tell 

    Aquí hay una secuencia de commands de Bluetooth simple que utiliza blueutil (disponible a través de Homebrew), sin secuencias de commands de interfaz de usuario. Ajuste la variable blueutil según sea necesario para apuntar al binary blueutil si no está instalando a través de Homebrew. Esto se basa libremente en un viejo script que tenía escrito que incluía notifications de Growl y probablemente era originalmente de http://macosxhints.com (RIP).

     set blueutil to "/usr/local/bin/blueutil" set powerStatus to do shell script blueutil & " power" if powerStatus is "1" then do shell script blueutil & " power 0" else if powerStatus is "0" then do shell script blueutil & " power 1" end if 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).