Objective c 如何检测OSX上运行的应用程序

Objective c 如何检测OSX上运行的应用程序,objective-c,xcode,macos,cocoa,background-process,Objective C,Xcode,Macos,Cocoa,Background Process,我想让我的应用程序作为菜单栏应用程序,我已经做到了。 我还想跟踪正在运行的应用程序 NSRunningApplication方法返回所有runnng应用程序。 但我想检测现在激活的唯一应用程序。(使用鼠标单击或命令+选项卡…) 我怎么能找到呢 我做了如下代码: - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [NSTimer scheduledTimerWithTimeInterval:0.

我想让我的应用程序作为菜单栏应用程序,我已经做到了。 我还想跟踪正在运行的应用程序


NSRunningApplication方法返回所有runnng应用程序。 但我想检测现在激活的唯一应用程序。(使用鼠标单击或命令+选项卡…) 我怎么能找到呢

我做了如下代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
     [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(performTimerBasedUpdate) userInfo:nil repeats:YES];
}

- (void)performTimerBasedUpdate {
     nowRunning = [NSRunningApplication currentApplication];
     nowRunningName = [nowRunning localizedName];
}
但是,它返回我创建的应用程序名(self)

  • 回答
我终于找到了答案:谢谢你。 我可以通过过滤器获得激活的应用程序。 我不知道我的财产

runningApplications_ = [[NSWorkspace sharedWorkspace] runningApplications];
nowRunning = [[runningApplications_ filteredArrayUsingPredicate:isActive] objectAtIndex:0];
bundleIdentifier_ = [nowRunning bundleIdentifier];
localizedName = [nowRunning localizedName];

使用
isActive
可以轻松找到应用程序是否处于活动状态。然后随意查看
localizedName
bundleIdentifier
。我对Objective-C不是很熟练,但使用Macruby语法,您可以通过以下方式获得它:

NSWorkspace.sharedWorkspace.runningApplications
    .select { |e| e.isActive == true }
    .map { |e| e.localizedName }

您可能需要筛选出您自己的应用程序:我没有在这方面测试菜单栏应用程序的处理方式。

您是指用户正在使用的应用程序?“NSRunningApplication方法返回所有runnng应用程序。但我想检测正在运行的应用程序。”-我感到困惑。我更新了我的问题。currentApplication方法始终返回我创建的应用程序。我想获取已激活的应用程序。对我拙劣的英语技能表示抱歉:)谢谢你的回答谢谢你,阿尔布拉希姆。但是我想得到的答案是如何找到appName:)我们从数组中获取名称,循环查找名称(在我发布的代码中…)不客气(对于Macruby而不是Obj-C习惯用法,我感到抱歉)。
NSWorkspace.sharedWorkspace.runningApplications
    .select { |e| e.isActive == true }
    .map { |e| e.localizedName }