2013-03-26 99 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结构中找到它,以确定它当前在哪个空间。这可能对你没有用,这取决于你对这些信息的处理方式。