2012-01-04 42 views
0

我是Objective-C和编程的新手,但是我开始掌握语法,并且有一个主要工作的应用程序,但是我正在努力处理一个部分。我希望能够使用我正在编写的应用程序来监视另一个应用程序的活动,即是否它是开放的。用nsarray监视外部应用程序(noob)

理想情况下,当用户单击按钮时,它将启动远程桌面客户端,然后监视远程桌面客户端关闭的时间。我想知道它何时关闭,以便我可以将我的应用程序放到最前面或重新启动计算机。我的问题主要是关注远程桌面客户端关闭时的问题。以下是我想要尝试的:

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

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

回答

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 [email protected](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 
    } 
} 
+0

完美的工作,我想我没有看NSNotificationCenter,因为我的语法太过于恐惧。谢谢! – dzimmerl 2012-01-04 21:57:29

+0

很高兴听到它!请点击投票图标下方的复选标记,接受解决问题的答案。 – 2012-01-04 22:07:49