gpt4 book ai didi

objective-c - 在 OS X 中,如何检测当前事件的应用程序何时发生变化?

转载 作者:行者123 更新时间:2023-12-04 03:19:40 26 4
gpt4 key购买 nike

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

任何人都可以推荐哪些 API 可用于此?我的猜测是辅助服务中的某些内容,因为这是大多数应用程序(如 BetterTouchTool 和类似应用程序)与当前应用程序交互的需要。但是,这些应用程序直接操作这些窗口,而我只是在寻找只读访问权限,因此我不确定是否需要这样做。

任何类似的指导或引用链接将不胜感激。

(P.S. 对标签很抱歉。我没有尝试过“事件应用程序”、“当前应用程序”、“重点应用程序”都画了空白。)

最佳答案

您可以使用 NSWorkspace在应用程序变为事件状态 ( NSWorkspaceDidActivateApplicationNotification ) 或退出事件状态 ( NSWorkspaceDidDeactivateApplicationNotification ) 时收到通知。请参阅 NSWorkspace 上的文档了解更多信息。

在你的 Controller 类中,你会做这样的事情:

- (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(并且将不再有效)后,不会尝试通知您的 Controller 对象。

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

关于objective-c - 在 OS X 中,如何检测当前事件的应用程序何时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com