Objective c 是否可以在Mac上使用Cocoa监控其他应用程序?

Objective c 是否可以在Mac上使用Cocoa监控其他应用程序?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,例如,获取另一个应用程序在屏幕上变为活动状态的通知,或退出活动状态。确定。在应用程序委派类中,您可以使用NSWorkspace在应用程序处于活动状态()或退出活动状态()时获得通知。有关更多信息,请参阅上的文档 在控制器类中,您可以执行以下操作: - (id)init { if ((self = [super init])) { [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self

例如,获取另一个应用程序在屏幕上变为活动状态的通知,或退出活动状态。

确定。在应用程序委派类中,您可以使用
NSWorkspace
在应用程序处于活动状态()或退出活动状态()时获得通知。有关更多信息,请参阅上的文档

在控制器类中,您可以执行以下操作:

- (id)init {
   if ((self = [super init])) {
       [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                             selector:@selector(appDidActivate:)
                            name:NSWorkspaceDidActivateApplicationNotification
                              object:nil];
   }
   return self;
}

- (void)dealloc {
    [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
    [super dealloc];
}

- (void)appDidActivate:(NSNotification *)notification {
   NSDictionary *userInfo = [notification userInfo];
   NSLog(@"userInfo == %@", userInfo);

}
关键点基本上是您需要注册以接收通知,如
-init
所示。您需要重复该代码,以便为所需的每个附加通知名称添加另一个观察者(例如
NSWorkspaceDidDeactivateApplicationNotification

另一件需要记住的重要事情是在
-dealloc
(或其他地方)中删除您自己作为观察者的身份,这样
NSWorkspace
就不会在控制器对象被释放+解除锁定(并且不再有效)后尝试通知它


在指定的
-appDidActivate:
方法中,对有关应用程序的信息执行任何需要的操作。

如果需要比以下更简单的操作,可以使用分布式通知中心的分布式通知。但是,除非您构建了应用程序,否则不会发布这些内容。为了监控应用程序何时启动或退出,您可以使用NSWorkspace及其通知中心(由NSGod建议)

ios simulator SDK中是否有与
NSWorkspace
等效的应用程序?这是否回答了您的问题?