контролировать внешнее приложение с помощью nsarray (noob) - PullRequest
0 голосов
/ 05 января 2012

Я новичок в Objective-C и программировании в целом, но я начинаю понимать синтаксис и имею в основном работающее приложение, но я борюсь с одной частью. Я хотел бы иметь возможность использовать приложение, которое я пишу, для отслеживания активности другого приложения, а именно, открыто оно или нет.

В идеале, когда пользователь нажимает кнопку, он запускает клиент удаленного рабочего стола и затем отслеживает закрытие клиента удаленного рабочего стола. Я хочу знать, когда он закрывается, чтобы я мог либо вывести свое приложение на передний план, либо перезагрузить компьютер. В основном мои проблемы связаны с наблюдением, когда клиент удаленного рабочего стола закрывается. Вот что я хотел попробовать:

do {
        NSArray* apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.microsoft.rdc"];

  } while ([apps count] >= 1);

1 Ответ

1 голос
/ 05 января 2012

Проблема с опубликованным вами подходом состоит в том, что цикл while блокирует основной поток, не позволяя вашему приложению делать что-либо еще. Вы можете запустить это в фоновом потоке, чтобы предотвратить эту проблему, но это, вероятно, не лучший подход.

Вместо этого взгляните на уведомления класса NSWorkspace. Одним из них является NSWorkspaceDidTerminateApplicationNotification. Вы должны быть в состоянии сделать что-то вроде этого:

// Put this part in your app delegate's applicationDidFinishLaunching: method, or some other appropriate place
NSNotificationCenter *nc = [[NSWorkspace sharedWorkspace] notificationCenter];
[nc addObserver:self selector@selector(anotherAppDidTerminate:) name:NSWorkspaceDidTerminateApplicationNotification object:nil];

- (void)anotherAppDidTerminate:(NSNotification *)notification
{
    NSRunningApplication *app = [[notification userInfo] objectForKey:NSWorkspaceApplicationKey];
    if ([app.bundleIdentifier isEqualToString:@"com.microsoft.rdc"]) {
        // RDC closed, so do whatever it is you want to here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...