2012-06-04 28 views
2

我想將我的應用程序作爲菜單欄應用程序,並且已經制作好了。 而且我想跟蹤哪些應用程序正在運行。如何檢測在OSX上運行的應用程序

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]; 
} 

但是,它返回一個我做的應用程序名稱(個體經營)。

  • 回答

我終於找到了答案:謝謝你,我,BLIS。 我可以通過過濾器獲得激活的應用程序。 我不知道isActive屬性!

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

您是指用戶正在使用的應用程序? 「 – self

+1

」NSRunningApplication方法返回所有runnng應用程序,但我想檢測正在運行的應用程序。「 - 讓我感到困惑。 – sosborn

+0

我們可以看到一些代碼嗎? – self

回答

5

你可以很容易找到,如果一個應用程序是活動的,isActive。然後按照您的意願查看localizedNamebundleIdentifier。我不能流利使用Objective-C,但與MacRuby的語法,你會得到它以下列方式:

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

您可能需要過濾掉自己的應用程序:我沒有測試菜單欄中的應用程序是如何處理的在這方面。

+0

非常感謝你:)並感謝你也是亞伯拉罕。 –

+0

@Min Joo隨時! – self

+0

不客氣(對於Macruby而不是Obj-C成語抱歉)。 –

2
NSWorkspace *workSpace = [NSWorkspace sharedWorkspace]; 
    NSString *appPathIs = [workSpace fullPathForApplication:appName]; 
    NSString *identifier = [[NSBundle bundleWithPath:appPathIs] bundleIdentifier]; 
    NSArray *selectedApps = 
           [NSRunningApplication runningApplicationsWithBundleIdentifier:identifier]; 
+0

謝謝AlbrahimZ。但我想要得到的答案是我怎麼才能找到appName :) –

+0

以及從數組中獲得名稱,通過它循環找到名稱(在我發佈的代碼中) – self

相關問題