【问题标题】:Open Notification Center programmatically on OS X在 OS X 上以编程方式打开通知中心
【发布时间】:2015-03-13 12:51:31
【问题描述】:

有没有办法从 Cocoa 应用程序打开 OS X 上的通知中心? 我们尝试启动通知中心应用程序,但这不起作用。 我们的应用没有沙盒,所以我们可以做任何需要的事情。

【问题讨论】:

    标签: macos cocoa osx-yosemite notificationcenter


    【解决方案1】:

    您可以使用 ScriptingBridge 打开它,但它不是官方 API,因此它可能有一天会损坏。 这有点奇怪,但这仅适用于沙盒应用。如果您的应用未经过沙盒处理,则您需要辅助功能访问权限。

    1。生成头文件

    打开终端并运行以下命令:

    cd ~/Desktop/
    sdef /System/Library/CoreServices/System\ Events.app | sdp -fh --basename SystemEvents
    

    将文件“SystemEvents.h”从您的桌面复制到您的项目中。 Xcode 将在此文件中的几行显示一些错误或警告。只需删除这些行。

    2。导入 ScriptingBridge 框架和生成的头文件。

    #import <ScriptingBridge/ScriptingBridge.h>
    

    #import "SystemEvents.h"
    

    3。添加代码

    SystemEventsApplication *systemEventsApp = (SystemEventsApplication *)[[SBApplication alloc] initWithBundleIdentifier:@"com.apple.systemevents"];
    SystemEventsApplicationProcess *sysUIServer = [systemEventsApp.applicationProcesses objectWithName:@"SystemUIServer"];
    
    SystemEventsMenuBarItem *item = nil;
    for (SystemEventsMenuBar *menuBar in sysUIServer.menuBars) {
        item = [menuBar.menuBarItems objectWithName:@"Notification Center"];
        if (item != nil && [item.name isEqualToString:@"Notification Center"])
            break;
    }
    
    [item clickAt:nil];
    

    如果您确定将来菜单栏不会改变,您也可以用此代码替换第 4-9 行:

    SystemEventsMenuBarItem *item = [[[sysUIServer.menuBars objectAtLocation:@2] menuBarItems] objectWithName:@"Notification Center"];
    

    4。为沙盒添加临时例外

    打开您的项目 .entitlements 文件并将“com.apple.security.temporary-exception.apple-events”添加为数组。将“com.apple.systemevents”添加为字符串。


    切换到今天视图

    这要求您的应用具有辅助功能访问权限,因此它无法在沙盒应用中运行。你可以简单地调用这个脚本而不是使用 ScriptingBridge:

    tell application "System Events"
        click menu bar item "Notification Center" of menu bar 2 of application process "SystemUIServer"
        click radio button "Today" of radio group 1 of window "NotificationTableWindow" of application process "NotificationCenter"
    end tell
    

    【讨论】:

    • 非常感谢您的详细解答!像魅力一样工作。
    【解决方案2】:

    不,很遗憾,不支持打开通知中心。大概是因为用户不希望打开它就打开它不会很烦人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多