我正在尝试自己解决这个问题。还没有,但在正确的方向:
- 每个任务控制“空间”都有一个
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";
}
);
}
如果您删除一个空格,该条目将从文件中删除。如果添加空格,则会添加一个条目。同样,Desktop 1 或 Dashboard 从来没有条目。
我不确定是否有公共 API 可以确定uuid
显示器上显示的空间。我假设这不是uuid
指显示器 1,而其他人的意思是显示器 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
似乎代表任务控制中的单个空间,以及许多其他 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???
诀窍是,如何访问WVSpaces
隐藏在 Dock 中的私有类?我假设它是单例,因为它有一个NSMutableArray *_spaces;
属性,可能每个空格都列在其中。一次只显示一个空间(如果您使用多台显示器,这也是如此;空间跨越它们),因此只有一个WVSpaces
实例是有意义的。
所以看起来它需要对 Dock 进行一些SIMBL黑客攻击才能访问WVSpaces
.