2012-01-04 39 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