Objective c 如何确定应用程序何时变为活动和处于活动状态?

Objective c 如何确定应用程序何时变为活动和处于活动状态?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,如何确定特定应用程序何时变为活动和处于活动状态 例如,用户打开chrome,然后切换到textmate,然后切换回chrome 我希望能够跟踪活动应用程序的时间和内容。在您拥有的NSApplicationLegate中 管理活动状态--仅适用于您自己的应用程序 应用程序将激活: ApplicationIDBecomeActive: applicationWillResignActive: ApplicationIDResignactive: 这些实际上是由您自己的NSApplication对

如何确定特定应用程序何时变为活动和处于活动状态

例如,用户打开chrome,然后切换到textmate,然后切换回chrome


我希望能够跟踪活动应用程序的时间和内容。

在您拥有的NSApplicationLegate中

管理活动状态--仅适用于您自己的应用程序

  • 应用程序将激活:
  • ApplicationIDBecomeActive:
  • applicationWillResignActive:
  • ApplicationIDResignactive:
这些实际上是由您自己的NSApplication对象发送的通知
一个通知适用于所有应用程序

  • NSWorkspaceDidActivateApplicationNotification

由当前活动应用程序的NSWorkspace对象发送的:

NSRunningApplication * frontmost;
frontmost = [[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"active == YES"]][0];
每次激活新应用程序时,您都会收到通知,如下所示:

_myObserver = [[[NSWorkspace sharedWorkspace] notificationCenter] addObserverForName:NSWorkspaceDidActivateApplicationNotification
                                                                object:nil
                                                                 queue:nil
                                                            usingBlock:^(NSNotification *note) {
    NSLog(@"New application: %@", [[note userInfo] objectForKey:NSWorkspaceApplicationKey]);
}];

我指的是当前运行的所有应用程序,而不是我自己的应用程序。这些特定于我自己的应用程序编号?…因为
applicationWill/Did…
通知由NSApplication对象(代表您自己的应用程序)发送,而
NSWorkspaceDidActivate/DeactivateApplicationNotification
由NSWorkspace对象(关于任何应用程序)发送。Yep,感谢您的澄清:)我编辑了我的答案,您对所有应用程序的要求并不明确IMHO@Daij-Djan很抱歉说不清楚,但我写了“如何确定某个特定应用程序的时间…”,我举了一个例子,如果用户打开chrome,然后是textmate等。不确定我还能说些什么?反正我给出了一个合适的答案