2013-03-26 47 views
0

是否有辦法在有多個桌面時獲取Mac OS X中活動桌面的ID。我沒有找到一種方法或API。如何獲取Mac OS X活動桌面的ID?

+0

活動桌面意味着什麼? – 2013-03-26 16:32:35

+0

您是否在談論OS X中的Spaces功能?使用適當的術語通常有助於技術.... – Jay 2013-03-26 17:38:24

+0

是的我正在談論OS X中的空間功能。 – user2212391 2013-03-26 17:48:51

回答

0

使用HIWindowGetCGWindowID爲您的WindowRef獲取CGWindowID

使用該ID與CGWindowListCreateDescriptionFromArrayCGWindow.h獲得有關您的窗口的信息。

查看返回的字典並提取(可選)kCGWindowWorkspace密鑰。

這是您窗口的空間ID。

來源:How to detect which Space the user is on in Mac OS X Leopard?

+0

謝謝。我試過這個' - (int)spaceNumber CFArrayRef windowsInSpace = CGWindowListCopyWindowInfo(kCGWindowListOptionAll | kCGWindowListOptionOnScreenOnly,kCGNullWindowID); (NSMutableDictionary * thisWindow in(NSArray *)windowsInSpace){ if([thisWindow objectForKey:(id)kCGWindowWorkspace]){0} } } return -1; '但它不起作用。它總是返回-1。也許是因爲在Mac OS X 10.8中不推薦使用「kCGWindowWorkspace」? – user2212391 2013-03-26 17:47:03

+0

@ user2212391:有沒有像過時的警告? – 2013-03-27 00:18:20

+0

是的,有一個警告,但有時不贊成apis仍然工作。但在這種情況下,它似乎不再工作。是否有另一種方式來獲得工作區ID? – user2212391 2013-03-27 10:18:20

0

如果你把在~/Library/Preferences/com.apple.spaces.plist似乎包含由它們的窗口號組織空間及其窗口的列表看看。每個空間都有一個名稱(最初的兩個似乎是儀表板和空字符串,我認爲它是第一個默認桌面)。如果你可以得到一個窗口號的引用,你可以嘗試在這個plist結構中找到它,以確定它當前在哪個空間。這可能對你沒有用,這取決於你對這些信息的處理方式。