Обнаружение, когда пространство изменяется в Пространствах в Mac OS X - PullRequest
13 голосов
/ 10 марта 2010

Допустим, я хочу написать простое приложение Cocoa, чтобы сделать функцию «Пространства» в Leopard более полезной. Я хотел бы настроить каждое пространство, чтобы, скажем, разные

  • разрешение экрана
  • раскладки клавиатуры
  • громкость (для аудио)

Итак, на мой вопрос есть две части:

  1. Полагаю, есть способы изменить эти три вещи независимо от пробелов, верно? Если да, то как?
  2. Как я могу определить в своем приложении, когда происходит изменение пространства, и когда это происходит, определить, на какое пространство пользователь только что переключился? Leopard отправляет какие-то распределенные уведомления или что-то в этом роде?

Обновление: должен быть какой-то общедоступный способ API, судя по всем связанным с Spaces приложениям в Mac App Store.

Ответы [ 2 ]

11 голосов
/ 05 июня 2011

Как говорит Питер, в 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(), &currentSpace);

Чтобы изменить разрешение экрана, вам нужно посмотреть Кварцевые службы , для изменения громкости это может быть полезно .

5 голосов
/ 10 марта 2010

NSWorkspace публикует NSWorkspaceActiveSpaceDidChangeNotification в своем собственном центре уведомлений, но только на Snow Leopard.

...