键盘快捷键可关闭通知


Answers:


25

您可以创建Automator服务来运行此Applescript,并在“系统偏好设置”中为其提供键盘快捷键。

这将关闭警报和横幅通知


在Automator中选择一项新服务

在此处输入图片说明


添加运行Applescript操作

在此处输入图片说明


并将其代码替换为:

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

设置“服务在[任何应用程序]中接收[无输入]”

保存服务。


在系统偏好设置中打开键盘快捷键,然后在“服务”下为您的服务设置 在此处输入图片说明

现在,任何新启动的应用程序都会选择快捷方式。

(注意:我对脚本进行了结构设计,以防止引发通知/窗口开始关闭时将发生的错误。

otifications /窗口编号为1到总数。但是,当它们关闭时,脚本仍然可以继续使用。但是系统将重新分配窗口索引。

因此,当我们说从1 -6开始时,脚本将尝试关闭窗口1,窗口2,窗口3,依此类推。但是系统已将窗口编号1,2,3重新分配给最后剩余的窗口。但是该脚本将尝试关闭窗口4并抛出错误,因为它不存在。该脚本将捕获并处理它。)


如果要单击警报通知上的“显示”按钮。您将单击按钮从1更改为2。

click button 2 of this_item

标语通知没有按钮2。

但是您只需单击窗口即可。

因此,此代码应注意显示。

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

谢谢,这真的很酷。它缺少的一件事是如何也打开而不是关闭通知...是您可以添加的内容,我很乐意接受您的回答!
Drewdavid

@Drewdavid更新了答案:-)
markhunte 2014年

1
Drewdavid:我遇到了同样的问题,因此放弃了在“安全性和隐私”下进行修复,而是通过BetterTouchTool设置了全局热键。
Bez Hermoso

1
注意:进程“ Notification Center”可以命名为“ NotificationCenter”的“ Notification Center”。系统将在Applescript中了解两者。在AppleScript中使用应用程序名称是正常的。如果您使用的是do Shell脚本或Unix,则使用实际的进程名称“ NotificationCenter”
markhunte

1
@Chris,将工作流另存为Automator中的Application。命名为“ Close All Noifications.app”,然后将其手动添加到辅助功能。然后如上所述创建服务,但在运行Applescript时使用:“告诉应用程序“关闭所有提名”以进行激活”
markhunte

6

不太符合您的要求:

您可以使用以下方式限制横幅广告类型显示的时间

终端并粘贴以下内容

defaults write com.apple.notificationcenterui bannerTime #

将#号替换为您希望横幅通知停留的秒数,然后注销并重新登录。

要恢复原始功能(5秒),请使用 defaults delete com.apple.notificationcenterui bannerTime

我知道您说不:但您可以使用脚本来循环打开/关闭通知,并为其分配键盘快捷键。暂时从命令行禁用Mountain Lion中的Notification Center?


感谢您的发布;时间限制在这里也值得注意:)
Drewdavid 2014年

这在高山脉工作吗?我无法使它产生任何效果。
luckman212 '18

0

markhunte的原始脚本有效,但在几个窗口后停止。窗口列表可能仅包括当前可见的窗口。当您有太多东西时,这将无法全部关闭。我在主循环外添加了一个循环来查询窗口,直到窗口计数为零为止。这是代码:

我在closeNotif()上的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

结束closeNotif

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.