есть способ получить идентификатор активного рабочего стола в Mac OS X, если у вас несколько рабочих столов. Я не нашел для этого метода или API.Как я могу получить идентификатор активного рабочего стола Mac OS X?
ответ
Используйте HIWindowGetCGWindowID
, чтобы получить CGWindowID
для вашего WindowRef
.
Используйте этот ID с CGWindowListCreateDescriptionFromArray
от CGWindow.h
, чтобы получить информацию о вашем окне.
Посмотрите на возвращаемый словарь и извлеките (необязательно) ключ kCGWindowWorkspace
.
Это ваш идентификатор пространства для вашего окна.
Источник: How to detect which Space the user is on in Mac OS X Leopard?
Спасибо. Я попробовал это '- (int) spaceNumber { CFArrayRef windowsInSpace = CGWindowListCopyWindowInfo (kCGWindowListOptionAll | kCGWindowListOptionOnScreenOnly, kCGNullWindowID); для (NSMutableDictionary * thisWindow in (NSArray *) windowsInSpace) { if ([thisWindow objectForKey: (id) kCGWindowWorkspace]) { return [[thisWindow objectForKey: (id) kCGWindowWorkspace] intValue]; } } возвращение -1; } 'но это не сработает. Он всегда возвращает -1. Может быть, потому что 'kCGWindowWorkspace' устарел в Mac OS X 10.8? – user2212391
@ user2212391: есть ли какие-либо предупреждения, подобные устаревшим? –
Да, есть предупреждение, но иногда устаревшая apis все еще работает. Но в этом случае, похоже, он больше не работает. Есть ли другой способ получить идентификатор рабочей области? – user2212391
Если вы посмотрите на ~/Library/Preferences/com.apple.spaces.plist
он, как представляется, содержит список пространств и их окон, организованных по их номеру окна. Каждое пространство имеет имя (первые два, похоже, являются панелью управления и пустой строкой, которую я предполагаю, это первый рабочий стол по умолчанию). Если вы можете получить ссылку на номер окна, вы можете попытаться найти его в этой структуре plist, чтобы определить, в каком именно пространстве оно находится. Это может или не может быть полезно для вас в зависимости от того, что вы пытаетесь сделать с этой информацией.
Активный рабочий стол означает? –
Вы говорите о функции Spaces в OS X? Использование правильной терминологии обычно помогает в технологии .... – Jay
Да, я говорю о функции Spaces в OS X. – user2212391