尝试为OS X编写一个应用程序,该应用程序根据当前的应用程序触发行为。它不需要与它交互。它只需要知道它什么时候改变,以及什么。
有人可以推荐哪些API可用于此吗?我的猜测将是辅助服务,因为大多数应用程序如BetterTouchTool和类似的需要与当前应用程序交互。但是,那些应用程序直接操作那些窗口,而我只关注只读访问,因此我不确定是否需要它。
非常感谢任何类似的指导或引用链接。
(P.S。对标签感到抱歉。我没有尝试过“活动应用程序”,“当前应用程序”,“专注应用程序”都吸引了空白。)
答案 0 :(得分:7)
您可以使用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
在释放后不会尝试通知您的控制器对象+ dealloc'd (并且将不再有效)。
在指定的-appDidActivate:
方法中,根据相关应用的相关信息,执行您需要的任何操作。