Можно ли контролировать другое приложение, используя Какао на Mac? - PullRequest
1 голос
/ 06 декабря 2011

Например, получить уведомление о том, что другое приложение становится активным на экране, или отказаться от активного состояния.

Ответы [ 2 ]

7 голосов
/ 06 декабря 2011

Конечно.В классе делегата приложения вы можете использовать NSWorkspace, чтобы получать уведомления, когда приложение становится активным (NSWorkspaceDidActivateApplicationNotification) или уходит в отставку (NSWorkspaceDidDeactivateApplicationNotification).См. Документацию по NSWorkspace для получения дополнительной информации.

В вашем классе контроллеров вы бы сделали что-то вроде этого:

- (id)init {
   if ((self = [super init])) {
       [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                             selector:@selector(appDidActivate:)
                            name:NSWorkspaceDidActivateApplicationNotification
                              object:nil];
   }
   return self;
}

- (void)dealloc {
    [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
    [super dealloc];
}

- (void)appDidActivate:(NSNotification *)notification {
   NSDictionary *userInfo = [notification userInfo];
   NSLog(@"userInfo == %@", userInfo);

}

Основные моменты в основномчто вам нужно зарегистрироваться, чтобы получать уведомления, как показано в -init.Вы должны повторить код, чтобы добавить другого наблюдателя для каждого дополнительного имени уведомления, которое вы хотите (например, NSWorkspaceDidDeactivateApplicationNotification).

Еще одна важная вещь, которую следует запомнить, - это удалить себя в качестве наблюдателя в -dealloc (или в другом месте).), так что NSWorkspace не пытается уведомить ваш объект контроллера после его освобождения + dealloc'd (и больше не будет действительным).

В указанном методе -appDidActivate: делайте все, что вынужно с информацией о приложении в вопросе.

0 голосов
/ 06 декабря 2011

Если вы хотите что-то более простое, чем распределенные объекты , вы можете использовать распределенные уведомления из распределенного центра уведомлений.Однако они не публикуются, если вы не создали приложение.Для мониторинга, когда приложения запускаются или выходят, вы можете использовать NSWorkspace и его центр уведомлений (предложенный NSGod)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...