2012-09-06 25 views
0

給定進程的PID,如何檢查它是否爲窗口化進程?我正在尋找OSX上的解決方案。檢查OSX中的進程是否爲窗口化進程

需要Objective-C/C解決方案。 我在OSX Mountain Lion上。

我將窗口化進程定義爲在活動監視器中選擇「窗口化進程」選項卡時可以看到的進程。 http://cl.ly/FeXR

+0

[This answer](http://stackoverflow.com/a/1888944/962089)解釋了原始win32中的一個過程,您可以在其中檢查每個正在運行的窗口,以查看它是否屬於您想要的過程。也許這有幫助? – chris

+0

@chris謝謝,但我正在尋找Objective-C或C中的OSX解決方案。 – fdh

+0

無論出於何種原因,儘管您多次提及OSX,但它從未在我的大腦中註冊過。道歉。也許有類似的OSX方法。 – chris

回答

2
[NSWorkspace runningApplications] 

這將返回一個NSArrayNSRunningApplication具有財產processIdentifier情況下,所有的用戶應用程序。

或者您可以直接使用runningApplicationWithProcessIdentifier:來獲取具有指定PID的應用程序。

下面是示例代碼:http://developer.apple.com/library/Mac/#samplecode/AppList/Introduction/Intro.html

通過的activationPolicy財產NSRunningApplication你可以得到的窗狀態。我修改了AppList代碼,使其僅顯示窗口應用程序,如下所示。這與活動監視器顯示的內容相匹配。

enter image description here

尤其是你正在尋找的NSApplicationActivationPolicyRegular

但請注意限制。這僅適用於用戶擁有的流程。

所有其他方法都被棄用,並且可能在將來無法使用。像GetBSDProcessList和Carbon的GetProcessInformation等方法不再被推薦。

+0

我不明白這是如何回答我的問題。您只是提供了一種方法來檢索所有用戶擁有的進程;唯一提及檢查過程是否被窗口化的方法並不能以任何方式回答問題。 – fdh

+0

你有沒有嘗試過自己的代碼,並閱讀我指出的文檔?無論如何,我已經更新了我的答案,以反映如何做到這一點。 –

+0

編輯答案非常有幫助!它完美的作品。感謝您的幫助! – fdh