Как говорит Питер, в 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;
}
}
В качестве альтернативы вы можете получить Space с помощью частного API, взгляните на CGSPrivate.h , который позволяет вам сделать это:
int currentSpace = 0;
CGSGetWorkspace(_CGSDefaultConnection(), ¤tSpace);
Чтобы изменить разрешение экрана, вам нужно посмотреть Кварцевые службы , для изменения громкости это может быть полезно .