尝试为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:
方法中,对有关应用程序的信息进行任何所需的操作。