尝试为 OS X 编写一个应用程序,该应用程序根据当前的应用程序触发行为。它不需要与它交互。它只需要知道何时更改以及更改内容。
任何人都可以推荐哪些 API 可用于此目的吗?我的猜测是辅助服务中的某些内容,因为这是大多数应用程序(例如 BetterTouchTool 和类似应用程序)需要与当前应用程序交互的内容。然而,这些应用程序直接操作这些窗口,而我只寻找只读访问权限,因此我不确定是否需要这样做。
任何类似的指导或参考链接将不胜感激。
(P.S. 对标签感到抱歉。我没有尝试过,“活动应用程序”、“当前应用程序”、“重点应用程序”全都是空白。)
您可以使用NSWorkspace
当应用程序变为活动状态时收到通知(NSWorkspaceDidActivateApplicationNotification http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html#//apple_ref/doc/uid/20000391-SW97)或退出活动(NSWorkspaceDidDeactivateApplicationNotification http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html#//apple_ref/doc/uid/20000391-SW98)。请参阅有关的文档NSWorkspace http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html了解更多信息。
在你的控制器类中,你会做这样的事情:
- (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:
方法,对相关应用程序的信息执行任何您需要的操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)