簡體   English   中英

如何檢測OSX上正在運行的應用程序

[英]How can I detect what application is running on OSX

我想將我的應用程序制作為菜單欄應用程序,而我已經做到了。 我也想跟蹤正在運行的應用程序。

NSRunningApplication方法返回所有運行中的應用程序。 但是我想檢測現在唯一激活的應用程序。 (通過單擊鼠標或命令+選項卡...)如何找到它?

我在下面做了代碼:

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

但是,它返回我創建的應用程序名稱(自己)。

  • 回答

我終於找到答案了:謝謝i-blis。 我可以使用過濾器獲取激活的應用程序。 我不知道isActive屬性!

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

您可以使用isActive輕松找到應用程序是否處於活動狀態。 然后bundleIdentifier查看localizedNamebundleIdentifier 我不太熟練使用Objective-C,但是使用Macruby語法可以通過以下方式獲得它:

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

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

NSWorkspace *workSpace = [NSWorkspace sharedWorkspace];

NSString *appPathIs = [workSpace fullPathForApplication:appName];

NSString *identifier = 
   [[NSBundle bundleWithPath:appPathIs] bundleIdentifier];

NSArray *selectedApps = 
   [NSRunningApplication runningApplicationsWithBundleIdentifier:identifier];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM