假设我想编写一个简单的Cocoa应用程序,以使Leopard的Spaces功能更有用。我想将每个空间配置为具有不同的
所以我的问题分为两部分:
更新:从Mac App Store上的所有与Spaces相关的应用程序来判断,必须有一些公共API方法。
答案 0 :(得分:11)
正如Peter所说,在10.6中,您可以使用NSWorkSpace
NSWorkspaceActiveSpaceDidChangeNotification
在工作区更改时收到通知。
然后,您可以使用Quartz API确定当前空间,kCGWindowWorkspace
字典键保存工作区。
例如:
int currentSpace;
// get an array of all the windows in the current Space
CFArrayRef windowsInSpace = CGWindowListCopyWindowInfo(kCGWindowListOptionAll | kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
// now loop over the array looking for a window with the kCGWindowWorkspace key
for (NSMutableDictionary *thisWindow in (NSArray *)windowsInSpace)
{
if ([thisWindow objectForKey:(id)kCGWindowWorkspace])
{
currentSpace = [thisWindow objectForKey(id)kCGWindowWorkspace] intValue];
break;
}
}
或者你可以使用私有API获取Space,看看CGSPrivate.h,它允许你这样做:
int currentSpace = 0;
CGSGetWorkspace(_CGSDefaultConnection(), ¤tSpace);
要更改屏幕分辨率,您需要查看Quartz services,以更改音量this may be helpful。
答案 1 :(得分:5)
NSWorkspace在自己的通知中心发布NSWorkspaceActiveSpaceDidChangeNotification
,但仅限Snow Leopard。