以编程方式跟踪Mac上的活动应用程序的最佳方法是什么

时间:2012-11-20 12:12:18

标签: objective-c macos cocoa macos-carbon

我想创建一个跟踪当前活动应用程序(活动窗口)的后台应用程序。我设法使用GetFrontProcess来获取活动应用程序,但现在我需要跟踪它,以便我知道它何时发生变化。 我想到了两种方式 1.设置Timmer并在每次定时器触发时重新检查变量(我应该创建一个线程吗?) 2.创建一个专用线程,在循环中检查变量并在每次迭代后休眠几毫秒以避免过度。

效率对我来说很重要,因为这应该是一个非令人不安的背景线索。 你认为那些方法是对的吗?任何效率考虑?很想听听更有效的不同想法。

感谢您的帮助 吉尔

1 个答案:

答案 0 :(得分:5)

您可以观察NSWorkspace通知NSWorkspaceDidActivateApplicationNotification

例如:

[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                   selector:@selector(appActivated:)
                                   name:NSWorkspaceDidActivateApplicationNotification
                                   object:nil];

并有一个方法:

-(void)appActivated:(NSNotification*) notification {
    NSRunningApplication* currentApp = [notification.userInfo valueForKey:NSWorkspaceApplicationKey];
    ....
}