使用nsarray监视外部应用程序(noob)

时间:2012-01-04 20:48:30

标签: objective-c macos

我是Objective-C和一般编程的新手,但我开始掌握语法并且有一个主要工作的应用程序,但是我正在努力解决一个问题。我希望能够使用我正在编写的应用程序来监视另一个应用程序的活动,即它是否打开。

理想情况下,当用户单击按钮时,它将启动远程桌面客户端,然后在远程桌面客户端关闭时进行监控。我想知道它何时关闭,以便我可以将我的应用程序带到最前端或重新启动计算机。大多数情况下,我的问题都围绕着关注远程桌面客户端何时关闭。这就是我在想的尝试:

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

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

1 个答案:

答案 0 :(得分:1)

您发布的方法的问题是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
    }
}