在应用程序准备好使用(已启动)之前调用的NSWorkspaceDidActivateApplicationNotification

时间:2013-03-10 14:48:14

标签: objective-c cocoa nsnotificationcenter nsnotifications accessibility-api

我正在使用NSWorkspaceDidActivateApplicationNotification和NSWorkspaceDidLaunchApplicationNotification通知来了解用户正在与哪个应用进行交互。

问题是,如果应用程序刚刚打开并仍在启动,我首先会收到激活通知,然后很快就会收到启动通知。

有没有办法知道在激活方法中应用程序仍在启动但尚未准备好使用? (仍然在码头里弹跳)

我看到apple的ichat示例项目不使用上述方法,而只是监听启动通知。然后,它使用kAXApplicationActivatedNotification将AXObserver添加到应用程序。这是首选方式吗? (还有NSRunningApplications将观察者添加到所有已加载的应用程序中)。

我想继续使用简单的简单NSNotifications,因为我认为它可能会减少内存消耗。 (无需为每个加载的应用程序保留一个观察者)。

1 个答案:

答案 0 :(得分:3)

检查NSWorkspaceDidActivateApplicationNotification的userinfo中传递的NSRunningApplication对象

NSRunningApplication *app = [note.userInfo objectForKey:NSWorkspaceApplicationKey]; 
if(app.isFinishedLaunching) 
    NSLog(@"up");