Let's say I want to write a simple Cocoa app to make the Spaces feature of Leopard more useful. I would like to configure each space to have, say, different
So there are two parts to my question:
Update: There has to be some public API way of doing this, judging from all the Spaces-related apps on the Mac App Store.
As Peter says, in 10.6 you can use the NSWorkSpace
NSWorkspaceActiveSpaceDidChangeNotification
to get a notification when the workspace changes.
You can then determine the current space using Quartz API, the kCGWindowWorkspace
dictionary key holds the workspace.
e.g:
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;
}
}
Alternatively you can get the Space using the private API, take a look at CGSPrivate.h which allows you to do this:
int currentSpace = 0;
CGSGetWorkspace(_CGSDefaultConnection(), ¤tSpace);
To change the screen resolution you'll want to look at Quartz services, for altering the volume this may be helpful.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With