我正在尝试自己解决这个问题。还没有,但方向正确:
- 每个任务控制“空间”都有一个分配给它的
uuid...
- ...除了第一个 (AFAIK) 和仪表板。
你可以在这里阅读:
$ defaults read com.apple.spaces
$ defaults read com.apple.desktop
文件位置:
~/Library/Preferences/com.apple.spaces.plist
~/Library/Preferences/com.apple.desktop.plist
这是我的。我启用了四个空格,并显示了三个条目:
$ defaults read com.apple.spaces
{
spaces = (
{
type = 0;
uuid = "9F552977-3DB0-43E5-8753-E45AC4C61973";
},
{
type = 0;
uuid = "44C8072A-7DC9-4E83-94DD-BDEAF333C924";
},
{
type = 0;
uuid = "6FADBDFE-4CE8-4FC9-B535-40D7CC3C4C58";
}
);
}
如果您删除一个空格,该条目将从文件中删除。如果添加空格,则会添加一个条目。同样,桌面 1 或仪表板永远不会有条目。
我不确定是否有公共 API 可以确定显示器上显示的空间 uuid。我假设 no uuid 表示 Display 1,而其他人的意思是 Display 1+n。
我快速浏览了 AppleScript 编辑器库(窗口 ---> 库),在系统事件下没有看到 spaces 的任何条目。这可能是 Cocoa 可以完成的事情,也许是通过私有 API,但我不确定 AppleScript。
更新 - 2011 年 7 月 23 日
看起来 Dock 控制着 Mission Control。你可以像这样获取它的头文件:
- 转至:
/System/Library/CoreServices/Dock
- 右键单击并显示包内容
- 导航:
/Contents/MacOS/
- 将
Dock 二进制文件复制并粘贴到您的桌面。
- 运行:
$class-dump ~/Desktop/Dock
这会吐出它的所有头文件(它很长;将近 7,500 行)。您可以看到其中出现了spaceUUID 字符串。有一个名为 WVSpace 的类,它似乎代表 Mission Control 中的一个 Space,以及许多其他 WV* 类。
我明天继续看;现在太累了。 :)
更新 - 2011 年 7 月 24 日
在 Dock 中有一个名为 WVSpaces 的类。它具有许多属性,包括:
WVSpace *currentSpace;
unsigned int currentWorkspace;
WVSpace *nextSpace; // Space on the right???
WVSpace *previousSpace; // Space on the left???
BOOL currentSpaceIsDashboard;
BOOL dashboardIsCurrent;
...lots more...
每个WVSpace 类都有一个NSString *_uuid; 属性,这很可能是它的SpaceUUID。所以理论上你可以像这样得到当前的空间号:
WVSpace *currentSpace = [[WVSpaces sharedInstance] currentSpace];
NSString *currentSpaceUUID = [currentSpace _uuid]; // Empty string if main space???
诀窍是,如何访问隐藏在 Dock 中的私有 WVSpaces 类?我假设它是 Singleton,因为它有一个 NSMutableArray *_spaces; 属性,其中可能列出了每个空格。一次只显示一个空间(如果您使用多台显示器,这也是如此;空间跨越它们),因此只有一个 WVSpaces 实例是有意义的。
所以看起来它需要对 Dock 进行一些 SIMBL 黑客攻击才能访问 WVSpaces。