1 votos

Activar o desactivar la función "No molestar" en una aplicación Applescript (MacOS Catalina)

Quiero activar o desactivar ( no simplemente alternar) No molestar dentro de una aplicación basada en Applescript.

Aparentemente hay solía ser un método para hacer esto en versiones más antiguas del sistema operativo (estoy en Catalina). Ahora, el única solución que he encontrado es un hack que utiliza un atajo de teclado para alternar la condición de No Molestar. Esto no me funcionará porque no conozco de antemano el estado de la configuración antes de ejecutar la aplicación y quiero desactivarla específicamente cuando se ejecuta la aplicación (más tarde la volveré a activar).

Si no hay forma de activar o desactivar específicamente la opción No molestar, supongo que lo que necesito saber es cómo averiguar el estado actual de la configuración y sólo ejecutar el atajo de teclado si no está en el estado deseado.

1voto

Denis Puntos 21

No es tan elegante como esperaba, pero parece que funciona.

Después de jugar un rato con la función de grabación, parece que puedo activar el DND cuando está apagado:

-- Click the “Notification Center” menu bar item.
delay 1.109957
set timeoutSeconds to 0.0
set uiScript to "click menu bar item \"Notification Center\" of menu bar 1 of application process \"SystemUIServer\""
my doWithTimeout(uiScript, timeoutSeconds)

-- Click the “<fill in title>” button.
delay 2.096055
set timeoutSeconds to 0.0
set uiScript to "click UI Element 3 of group \"Do Not Disturb\" of scroll area 1 of window \"Notification Center\" of application process \"Notification Center\""
my doWithTimeout(uiScript, timeoutSeconds)

on doWithTimeout(uiScript, timeoutSeconds)
    set endDate to (current date) + timeoutSeconds
    repeat
        try
            run script "tell application \"System Events\"
" & uiScript & "
end tell"
            exit repeat
        on error errorMessage
            if ((current date) > endDate) then
                error "Can not " & uiScript
            end if
        end try
    end repeat
end doWithTimeout

y viceversa:

-- Click the “Notification Center” menu bar item.
delay 2.508349
set timeoutSeconds to 2.0
set uiScript to "click menu bar item \"Notification Center, Do Not Disturb enabled\" of menu bar 1 of application process \"SystemUIServer\""
my doWithTimeout(uiScript, timeoutSeconds)

-- Click the “<fill in title>” button.
delay 1.176098
set timeoutSeconds to 2.0
set uiScript to "click UI Element 3 of group \"Do Not Disturb\" of scroll area 1 of window \"Notification Center\" of application process \"Notification Center\""
my doWithTimeout(uiScript, timeoutSeconds)

on doWithTimeout(uiScript, timeoutSeconds)
    set endDate to (current date) + timeoutSeconds
    repeat
        try
            run script "tell application \"System Events\"
" & uiScript & "
end tell"
            exit repeat
        on error errorMessage
            if ((current date) > endDate) then
                error "Can not " & uiScript
            end if
        end try
    end repeat
end doWithTimeout

Sería mejor si hubiera una solución que comprobara su estado o especificara explícitamente el nuevo estado deseado en lugar de limitarse a alternar. Hay una pequeña diferencia entre el "on" y el "off" scripts así que no es exactamente pero funciona pulsando el botón.

1voto

user3439894 Puntos 5883

El ejemplo AppleScript código que se muestra a continuación, se probó bajo MacOS Catalina con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 a su vez No molestar o bien en o fuera de .

  • 1 Asume la configuración necesaria y adecuada en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.

El setDoNoDisturbTo() manipulador toma uno parámetro , "On" o "Off" .

Ejemplo AppleScript código :

my setDoNoDisturbTo("Off")

on setDoNoDisturbTo(OnOff)
    set checkDNDstatusCMD to ¬
        {"defaults -currentHost read", space, ¬
            "~/Library/Preferences/ByHost/", ¬
            "com.apple.notificationcenterui", ¬
            space, "doNotDisturb"} as string
    set statusOfDND to ¬
        (do shell script checkDNDstatusCMD) ¬
            as number as boolean
    if statusOfDND is false and OnOff is "On" then
        set OnOff to true
    else if statusOfDND is true and OnOff is "Off" then
        set OnOff to false
    else
        return
    end if
    set changeDNDstatusCMD to ¬
        {"defaults -currentHost write", space, ¬
            "~/Library/Preferences/ByHost/", ¬
            "com.apple.notificationcenterui", ¬
            space, "doNotDisturb -boolean", space, OnOff, ¬
            space, "&& killall NotificationCenter"} as string
    do shell script changeDNDstatusCMD
end setDoNoDisturbTo

Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X