1

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

4

2 回答 2

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
于 2015-03-20T11:21:13.947 回答
0

不,很遗憾,不支持打开通知中心。据说是因为用户在不希望它打开的情况下打开它不会很烦人

于 2015-03-14T16:17:58.430 回答