3 votos

¿Cómo borrar todas las notificaciones con 1 clic en Catalina?

Este hilo ofrece un AppleScript para borrar todas las notificaciones en el Centro de Notificaciones, pero todas las respuestas parecen ser pre-Catalina. Post-Catalina, con la misma secuencia de comandos me sale un error (reportadas a través de un Teclado Maestro) que el Centro de Notificaciones no se puede acceder al "cerrar" de propiedades de sus ventanas. Mirando a través de algunos de los AppleScript diccionarios parece que el Centro de Notificaciones no tiene ventanas en todos (más?).

¿Cuál sería la forma para lograr esto en Catalina?

3voto

red_menace Puntos 111

Cuando las secuencias de comandos de la interfaz de usuario, para cosas como las ventanas y los menús de la jerarquía de objetos, en general, no existen hasta que no se demuestre, de manera que el objeto necesita ser mostrado antes de tratar de obtener sus propiedades. Una vez que la ventana o se muestra el menú, puede utilizar la Accesibilidad de la herramienta Inspector (incluido en el Xcode paquete) o manualmente spelunk los diversos elementos de interfaz de usuario para encontrar el que usted está buscando. Curiosamente, el Automator "Watch Me" acción también es muy útil para identificar determinados elementos de interfaz de usuario (probablemente el mejor), como los eventos que los registros se pueden copiar y pegar en el Editor de secuencias de Comandos.

Para el Centro de Notificaciones de la ventana, el diseño puede variar, así como las notificaciones individuales de cada uno han de cerrar o despedir a los botones, y también puede haber un total de cerca de/botón descartar para las notificaciones agrupadas por aplicación, a pesar de que no están etiquetados como tales. Desde el primer botón está situado convenientemente en el mismo lugar, a sólo cerca de/rechazar todo lo que un script puede ser usado para hacer clic en ese elemento hasta que no hay más (prueba en Mojave y Catalina):

tell application "System Events"
    # show notification window
    tell application process "SystemUIServer" to click menu bar item "Notification Center" of menu bar 1

    # loop through the app close buttons
    tell process "Notification Center" to try
        repeat -- forever (at least until there are no more)
            delay 0.25
            click UI element 2 of UI element 1 of row 2 of table 1 of scroll area 1 of window "Notification Center" -- the topmost close button
        end repeat
    on error errmess -- no more
        log errmess
    end try

    # close the window
    # tell application process "SystemUIServer" to click menu bar item "Notification Center" of menu bar 1
end tell

0voto

qarma Puntos 71

@red_menace ha proporcionado una excelente respuesta y explicación. Elegiría realizar un guión para el cierre de todas las notificaciones dirigiéndolos a todos a la vez para realizar una sola acción. Sería más eficiente que un bucle repeat y, por lo tanto, debería producir un espacio libre más rápido con poco o ningún estancamiento.

 use application id "com.apple.SystemEvents"

property SystemUIServer : a reference to process "SystemUIServer"
property menu bar : a reference to menu bar 1 of SystemUIServer
property icon : a reference to menu bar item "Notification Center" of my menu bar


-- If the notification centre icon isn't there,
-- terminate execution (result: -1)
if not (the icon exists) then return -1
click the icon -- Open notification centre

-- Clear all notifications
click button 1 of UI element 1 of (rows ¬
    of table 1 of scroll area 1 of ¬
    window "Notification Center" of ¬
    process "NotificationCenter" whose ¬
    class of button 1 of UI element 1 = button)

if not (the icon exists) return 0.5
click the icon -- Close notification centre
return 1
 

Nota: Probado en High Sierra y Catalina con los privilegios de seguridad apropiados otorgados

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