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 detectar si Chrome (o cualquier otra aplicación) está reproduciendo sonido usando bash / applescript
  • Obtener el apodo del usuario actual
  • Se busca: Apple Script para copyr el nombre del file y pegarlo en el cuadro de comentarios de Spotlight Mac OS X 10.8.5
  • Atenuación de persecución en Applescript
  • AppleScript: ¿Cómo get todos los nombres de windows de los processs que comparten el mismo título?
  • ¿Cómo configurar un Applescript para eliminar files adjuntos en Mail como parte de una regla?
  • 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.

  • Cómo borrar y formatear la tarjeta SD a ext3 en mi macbook para prepararla para mi pi raspberry
  • No puedo actualizar mi sistema operativo hasta que cambie la configuration de mi unidad icloud
  • Permisos para nuevos files en el directory compartido
  • OSX Sierra se bloquea al acceder a Impresoras
  • Cómo usar una fuente personalizada en iMovie en OSX
  • ¡Flash Player rompe Safari!
  • 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).