Обнаружение полноэкранного режима на Mac - PullRequest
2 голосов
/ 11 марта 2009

Я пишу IM-клиент для Mac (на Python, но решение Objective C / Cocoa здесь хорошо). Я хочу определить, смотрит ли пользователь в данный момент фильм или играет в игру на переднем плане, или делает что-то еще, что занимает весь экран. Если это так, я не буду воспроизводить звук при входе нового чата, но если нет, я буду воспроизводить звук.

Как я могу это обнаружить? Есть ли какой-нибудь способ получить окно переднего плана с помощью Applescript и посмотреть на его размеры? Или есть какой-то другой вызов API?

Ответы [ 4 ]

9 голосов
/ 11 марта 2009

Чтобы проверить полноэкранный режим, вызовите CGDisplayIsCaptured (screenID) на каждом экране.

Но я не уверен, правильно ли вы проверяете. Во-первых, у меня мог быть один снимок экрана («полный экран») и второй снимок экрана, что вы хотите сделать в этом случае?

Кроме того, полноэкранный режим что-нибудь значит? Если я использую GarageBand для работы над песней, я, вероятно, не хочу слышать случайные звуки, независимо от того, работает ли что-либо в полноэкранном режиме. Или я могу запустить полноэкранную виртуальную машину Windows, но все же хочу получать уведомления о мгновенных сообщениях.

2 голосов
/ 11 марта 2009

не совсем уверен, как это сделать, но apple docs говорят:

Для отслеживания изменений в логине режим презентации сеанса, вы можете обращаться с kEventAppSystemUIModeChanged Углерод событие

0 голосов
/ 15 августа 2012

В Mountain Lion (и, возможно, ранее) вы можете отслеживать наличие строки меню, отслеживая распределенные уведомления com.apple.HIToolbox.hideMenuBarShown и com.apple.HIToolbox.hideMenuBarShown. Нет меню обычно == полноэкранный режим. Это работает во всех приложениях, поэтому вы можете определить, когда, например, VLC переходит в полноэкранный режим или когда кто-то переключается на iCal в полноэкранном режиме.

Для этого зарегистрируйтесь для получения этих двух уведомлений:

[[NSDistributedNotificationCenter defaultCenter] addObserver:self
        selector:@selector(windowDidEnterFullScreen:)
        name:@"com.apple.HIToolbox.hideMenuBarShown"
        object:nil];

[[NSDistributedNotificationCenter defaultCenter] addObserver:self
       selector:@selector(windowDidExitFullScreen:)
       name:@"com.apple.HIToolbox.frontMenuBarShown"
       object:nil];

затем создайте свои собственные селекторы для обработки этих случаев. frontMenuBarShown срабатывает все время, поэтому, чтобы поймать реальную отдачу от полноэкранного режима, следите за первым «didExit», который следует за «didEnter» ...

0 голосов
/ 11 марта 2009

Два опубликованных решения применимы к «реальному» полноэкранному режиму, но стоит отметить, что многие полноэкранные приложения просто помещают окно на весь экран (или, как указывает Васи, a * 1002). * весь экран). Чтобы быть точным, вы должны проверить оба.

...