尝试为OS X编写一个应用程序,该应用程序根据当前应用程序触发行为。它不需要与之交互。它只需要知道何时更改以及更改了什么。

谁能推荐适用于此的API?我的猜测可能是辅助服务中的东西,因为大多数应用程序(例如BetterTouchTool等)都需要与当前应用程序进行交互。但是,那些应用程序直接操纵那些窗口,而我只在寻找只读访问权限,因此我不确定是否需要这样做。

任何有关类似内容的指导或参考链接将不胜感激。

(P.S.对不起,这些标签。我尝试过的“活动应用程序”,“当前应用程序”,“重点应用程序”都没有留白。)

最佳答案

您可以使用NSWorkspace在应用程序变为活动状态(NSWorkspaceDidActivateApplicationNotification)或退出活动(NSWorkspaceDidDeactivateApplicationNotification)时得到通知。有关更多信息,请参见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:方法中,对有关应用程序的信息进行任何所需的操作。

08-18 14:47
查看更多