2

メニューバーアプリとして作成したいのですが、もう作成しました。また、実行中のアプリケーションを追跡したいと思います。

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

2 に答える 2

5

アプリケーションがでアクティブであるかどうかを簡単に見つけることができますisActivelocalizedName次に、またはbundleIdentifierあなたの意志で覗いてください。私はObjective-Cに精通していませんが、Macruby構文を使用すると、次の方法で取得できます。

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

独自のアプリケーションを除外する必要があるかもしれません。この点でメニューバーアプリがどのように処理されるかはテストしていません。

于 2012-06-04T12:11:35.673 に答える
2
NSWorkspace *workSpace = [NSWorkspace sharedWorkspace];

NSString *appPathIs = [workSpace fullPathForApplication:appName];

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

NSArray *selectedApps = 
   [NSRunningApplication runningApplicationsWithBundleIdentifier:identifier];
于 2012-06-04T09:29:44.270 に答える