2012-12-07 75 views
5

我想獲取正在運行的應用程序的窗口列表。 我可以從[[NSWorkspace sharedWorkspace] runningApplications]獲得正在運行的應用程序列表,但窗口列表僅在NSApplication上可用。 有沒有辦法將NSRunningApplication轉換爲NSApplication,或者有些方法可以更直接地獲取窗口列表?如何獲取NSRunningApplication的窗口

+0

下面是同樣的問題,已經回答:http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –

+0

即使在這裏http:// stackoverflow.com/questions/13759688/how-to-find-out-if-an-instance-of-my-app-is-already-running-or-not/13759928#13759928 –

+0

寡婦列表更直接的意思? –

回答

6

您需要查看CoreGraphics調用CGWindowListCopyWindowInfo

你這樣稱呼它

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); 

,然後遍歷的窗口信息陣列上,發現從你感興趣的應用程序的部分,做你想要做什麼用。

+3

嘿肯!這是一個很好的答案/提示,但它仍然沒有說明如何獲得'CG/NSWindow' ;-)'NSRunningApplication'不提供窗口/窗口號,並且在嘗試時崩潰(可能做錯了事)通過'CGWindowListCopyWindowInfo'獲得'CGWindowID'獲得'NS/CGWindow' –

+1

這是因爲你不能爲另一個應用程序創建NSWindow。至於獲取特定應用程序的窗口,您可以檢查並比較'kCGWindowOwnerPID'鍵的值與'NSRunningApplication'的'processIdentifier'屬性的值。 – mattsven