Tastaturkürzel, um Benachrichtigungen zu schließen

26

Ich möchte Benachrichtigungen über die Tastatur schließen und öffnen können

(Ich spreche nicht über das Öffnen / Schließen des Benachrichtigungszentrums)

Ist das möglich? Und wenn ja, wie?

Drewdavid
quelle
Haben Sie das gewünschte Update gesehen?
markhunte

Antworten:

25

Sie können einen Automator-Dienst erstellen, um dieses Applescript auszuführen, und ihm eine Tastenkombination in den Tastenkombinationen der Systemeinstellungen zuweisen

Dies schließt die Benachrichtigung und die Bannerbenachrichtigung


Wählen Sie im Automator einen neuen Dienst

Bildbeschreibung hier eingeben


Fügen Sie eine Applescript-Aktion hinzu

Bildbeschreibung hier eingeben


und ersetze den Code durch:

my closeNotif()
on closeNotif()

    tell application "System Events"
        tell process "Notification Center"
            set theWindows to every window
            repeat with i from 1 to number of items in theWindows
                set this_item to item i of theWindows
                try
                    click button 1 of this_item
                on error

                    my closeNotif()
                end try
            end repeat
        end tell
    end tell

end closeNotif

Setze den 'Dienst empfängt [keine Eingabe] in [jeder Anwendung]'

Speichern Sie den Dienst.


Öffnen Sie die Tastaturkürzel in den Systemeinstellungen und legen Sie Ihre Einstellungen für Ihren Dienst unter "Dienste" fest. Bildbeschreibung hier eingeben

Jetzt übernimmt jede neu gestartete App die Verknüpfung.

(Hinweis: Ich habe das Skript so strukturiert, dass beim Schließen der Benachrichtigungen / Fenster kein Fehler mehr ausgegeben wird.

otifications / window sind von 1 bis zur Gesamtzahl nummeriert. Aber wenn sie schließen, würde das Drehbuch immer noch nach dem alten Stand funktionieren. Das System weist jedoch den Index der Fenster neu zu.

Wenn wir also bei 1 -6 beginnen sagen, wird das Skript versuchen, Fenster 1, Fenster 2, Fenster 3 usw. zu schließen. Das System hat den letzten verbleibenden Fenstern die Fensternummern 1,2,3 zugewiesen. Aber das Skript wird versuchen, Fenster 4 zu schließen und einen Fehler auszulösen, da er nicht existiert. Das Skript wird dies auffangen und damit umgehen. )


Wenn Sie in einer Warnmeldung auf die Schaltfläche "Anzeigen" klicken möchten. Sie ändern die Schaltfläche, auf die Sie klicken, von 1 auf 2.

click button 2 of this_item

Bannerbenachrichtigungen haben keine Schaltfläche 2.

Sie können aber einfach auf das Fenster klicken.

Dieser Code sollte sich also um das Anzeigen kümmern.

my closeNotif()
on closeNotif()

    tell application "System Events"
        tell process "Notification Center"
            set theWindows to every window
            repeat with i from 1 to number of items in theWindows
                set this_item to item i of theWindows
                set cnt to count buttons of this_item
                try
                    if cnt > 1 then

                        click button 2 of this_item
                    else
                        click this_item
                    end if
                on error

                    closeNotif()
                end try
            end repeat
        end tell
    end tell

end closeNotif
markhunte
quelle
Danke, das ist echt cool. Das einzige, was fehlt, ist, wie man eine Benachrichtigung öffnet, anstatt sie zu schließen. Das können Sie hinzufügen, und ich nehme Ihre Antwort gerne an!
Drewdavid
@Drewdavid hat die Antwort aktualisiert :-)
markhunte
1
Drewdavid: Ich habe das gleiche Problem und habe aufgehört, es unter Sicherheit und Datenschutz zu beheben. Ich habe nur einen globalen Hotkey über BetterTouchTool eingerichtet.
Bez Hermoso
1
Hinweis: Der Prozess "Notification Center" kann als "Notification Center" von "NotificationCenter" bezeichnet werden. Das System wird beide in Applescript verstehen. Es ist normal, den Namen der App in AppleScript zu verwenden. In diesem Fall "Notification Center". Wenn Sie ein Do-Shell-Skript oder Unix verwenden, verwenden Sie den tatsächlichen Prozessnamen "NotificationCenter"
markhunte
1
@ Chris, speichern Sie den Workflow als Anwendung in Automator. Etwas wie "Close All Noifications.app" benannt. Fügen Sie es dann manuell zur Eingabehilfe hinzu. Dann erstelle einen Dienst wie oben beschrieben, aber im Applescript-Lauf benutze: "sage der Anwendung, dass" Alle Benachrichtigungen schließen "aktiviert werden soll"
markhunte
6

Nicht ganz das, wonach du fragst:

Sie können die angezeigte Zeit für den Bannertyp mit einschränken

Terminal und fügen Sie Folgendes ein

defaults write com.apple.notificationcenterui bannerTime #

Wenn das # -Nummernzeichen durch die Anzahl der Sekunden ersetzt wird, in denen Bannerbenachrichtigungen angezeigt werden sollen, melden Sie sich ab und wieder an.

Zur Wiederherstellung der ursprünglichen Funktion (5 Sekunden) verwenden Sie defaults delete com.apple.notificationcenterui bannerTime

Ich weiß , Sie sagten nicht: aber man kann Zyklus die Benachrichtigung bei / mit einem Skript ab und sehen eine Tastatur Abkürzung zuweisen. Benachrichtigungscenter in Mountain Lion vorübergehend über die Befehlszeile deaktivieren?

Ruskes
quelle
Danke fürs Schreiben; Das Zeitlimit ist auch hier erwähnenswert :)
Drewdavid
Funktioniert das in High Sierra? Ich konnte es nicht bewirken.
luckman212
0

Das Originalskript von markhunte funktioniert, stoppt aber nach ein paar Fenstern. Es kann sein, dass die Liste der Fenster nur diejenigen enthält, die aktuell sichtbar sind. Wenn Sie zu viele haben, wird dies nicht alle schließen. Ich habe eine Schleife außerhalb der Hauptschleife hinzugefügt, um die Fenster abzufragen, bis wir eine Fensteranzahl von Null erhalten. Hier ist der Code:

mein closeNotif () auf closeNotif ()

tell application "System Events"
    tell process "Notification Center"
        set theWindows to every window
        set nWindows to number of items in theWindows
        repeat until nWindows is 0
            repeat with i from 1 to number of items in theWindows
                set this_item to item i of theWindows
                try
                    click button 1 of this_item
                    delay 0.2
                on error

                    my closeNotif()
                end try
            end repeat
            set theWindows to every window
            set nWindows to number of items in theWindows
        end repeat
    end tell
end tell

Ende schließenNotif

Sandhitsu Das
quelle