Как я могу определить, какое приложение работает на 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];

person Min Joo    schedule 04.06.2012    source источник
comment
вы имеете в виду приложение, которое использует пользователь?   -  person self    schedule 04.06.2012
comment
Метод NSRunningApplication возвращает все запущенные приложения. Но я хочу обнаружить запущенное приложение. - Цвет меня смутил.   -  person sosborn    schedule 04.06.2012
comment
Я обновил свой вопрос. Метод currentApplication всегда возвращает созданное мной приложение. Я хочу получить приложение, которое активировано. пс. Извините за мое скромное знание английского :)   -  person Min Joo    schedule 04.06.2012
comment
Спасибо за твой ответ   -  person Vikas Bansal    schedule 29.07.2015


Ответы (2)


Вы можете легко определить, активно ли приложение, с помощью isActive. Затем посмотрите localizedName или bundleIdentifier по своему желанию. Я не очень хорошо разбираюсь в Objective-C, но с синтаксисом Macruby вы получите его следующим образом:

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

Возможно, вам придется отфильтровать свое собственное приложение: я не проверял, как в этом отношении обрабатываются приложения в строке меню.

person i-blis    schedule 04.06.2012
comment
Добро пожаловать (и извините за Macruby, а не за идиому Obj-C). - person i-blis; 05.06.2012

person    schedule
comment
Спасибо, AlbrahimZ. Но ответ, который я хочу получить, это как найти appName :) - person Min Joo; 04.06.2012
comment
Хорошо получите имя из массива, прокрутите его, чтобы найти имя (в коде, который я разместил..) - person self; 04.06.2012