3 votes

Comment effacer toutes les notifications en 1 clic dans Catalina ?

Cette question propose un AppleScript pour effacer toutes les notifications dans le centre de notification, mais toutes les réponses semblent être antérieures à Catalina :

Comment effacer toutes les notifications d'OS X en 1 clic ?

Post-Catalina, avec le même script, j'obtiens une erreur (signalée via Keyboard Maestro) selon laquelle le Centre de notification ne peut pas accéder à la propriété "close" de ses fenêtres. En regardant dans certains dictionnaires AppleScript, il semble que le Centre de notification n'a pas de Windows du tout (plus ?).

Quelle serait la façon d'accomplir cela dans Catalina ?

3voto

red_menace Points 1014

Lors du scriptage de l'interface utilisateur, pour des éléments tels que les fenêtres et les menus, la hiérarchie des objets n'existe généralement pas tant qu'elle n'est pas affichée, de sorte que l'objet doit être affiché avant d'essayer d'obtenir ses propriétés. Une fois la fenêtre ou le menu affiché, vous pouvez utiliser l'outil Accessibility Inspector (inclus dans le pack Xcode) ou éplucher manuellement les différents éléments de l'interface utilisateur pour trouver ceux que vous recherchez. Il est intéressant de noter que l'action "Watch Me Do" d'Automator est également très pratique pour identifier des éléments spécifiques de l'interface utilisateur (probablement sa meilleure utilisation), car les événements qu'elle enregistre peuvent être copiés/collés dans l'éditeur script.

Pour la fenêtre du centre de notification, la disposition peut varier, car les notifications individuelles ont chacune des boutons de fermeture/suppression, et il peut également y avoir un bouton global de fermeture/suppression pour les notifications regroupées par application, bien qu'elles ne soient pas étiquetées comme telles. Comme le bouton le plus haut est commodément situé au même endroit, pour tout fermer/supprimer, un script peut être utilisé pour cliquer sur cet élément jusqu'à ce qu'il n'y en ait plus (testé dans Mojave et 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

2voto

Jack Chen Points 111

En complément de la réponse de @red_menace, qui ne fonctionne que si vous êtes déjà sur l'onglet "Notifications". Voici le code pour passer automatiquement à l'onglet "Notifications" (et revenir à la vue "Aujourd'hui" si vous le souhaitez)

tell application "System Events"

    # Show "Notifications" Tab
    tell application process "SystemUIServer" to click menu bar item "Notification Center" of menu bar 1

    tell process "Notification Center" to click radio button 2 of radio group 1 of window 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

    # Return to "Today" Tab
    tell process "Notification Center" to click radio button 1 of radio group 1 of window 1

end tell

0voto

OnePablo Points 1

@red_menace a fourni une excellente réponse et explication. Je choisirais de script la fermeture de toutes les notifications en les ciblant toutes en même temps afin d'effectuer une seule action. Ce serait plus efficace qu'un repeat et devrait donc produire un dégagement plus rapide avec peu ou pas de décrochage.

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

Note : Testé sur High Sierra et Catalina avec les privilèges de sécurité appropriés.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X