加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – 在OS X中,如何检测当前活动的应用程序何时更改?

发布时间:2020-12-14 17:11:44 所属栏目:百科 来源:网络整理
导读:尝试为OS X编写一个应用程序,根据当前的应用程序触发行为.它不需要与它交互.它只需要知道什么时候改变,什么. 任何人都可以推荐哪些API可用于此?我的猜测将是辅助服务,因为大多数应用程序如BetterTouchTool和类似的需要与当前应用程序交互.但是,那些应用程序
尝试为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在释放dealloc’d(并且不再有效)之后不会尝试通知您的控制器对象.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读