Mac OS X Lion: определить, запущено ли другое приложение в полноэкранном режиме? - PullRequest
17 голосов
/ 21 августа 2011

В приложении Какао есть способ узнать, находится ли другое приложение в полноэкранном режиме в данный момент?

Мое приложение настроено на отображение во всех пробелах и прослушивает mouseEntered события, чтобы упорядочить себя вперед.

Проблема в том, что когда другое приложение находится в полноэкранном режиме, и пользователь случайно перемещает мышь по черной области, где находится окно моего приложения, оно переносится на передний план (происходит с несколькими мониторами).

Я видел вышеупомянутое поведение только с включенным [self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];.

Вот другой соответствующий код для моего приложения.

- (void) mouseEntered:(NSEvent *)theEvent
{
    // Don't do this when another app is in full screen mode:
    [[self window] orderFront:self];
}

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Используйте уведомления.Например:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(willEnterFull:)
                                             name:NSWindowWillEnterFullScreenNotification
                                           object:nil];

На самом деле вы, вероятно, захотите использовать вместо этого NSDistributedNotificationCenter, поскольку он распространяется на процессы.

Вы добавляете свой объект в качестве наблюдателя, так что когда что-тоеще отправляет уведомление о том, что он войдет в полноэкранный режим, ваш объект получит это уведомление.

Селектор - это сообщение / метод, который вы хотите вызвать в процессе уведомления.

Параметр name - это параметрфактическое название уведомления.Они являются стандартными, если только вы не должны были создавать пользовательские уведомления для чего-то, что вы будете использовать.

Параметр объекта предназначен для указания того, от какого объекта вы хотите получать уведомления.Поскольку вы хотите знать, когда ЛЮБОЕ приложение работает в полноэкранном режиме, вы должны оставить этот ноль.

Не забудьте удалить свой объект в качестве наблюдателя, прежде чем он будет освобожден!

1 голос
/ 09 апреля 2013

Вышеупомянутые методы регистрации для

"NSWindowWillEnterFullScreenNotification"

не работают, их можно использовать для уведомления вашего собственного приложения, используя их, мы не можем определить, находится ли какое-либо другое приложение вПолноэкранный режим или нет.

Однако После того, как вы опробовали так много опций, нашли приложение FullScreen детектор на github по этой полезной ссылке ..:):)

https://github.com/shinypb/FullScreenDetector.git

1 голос
/ 06 сентября 2011

Хм, вы исключили использование applecript / scriptingbridge? Вы можете получить размер окон из appleScript и сравнить их с размером экрана. (или вы не знаете, на каком экране находится данное приложение?)
Некоторые доступные приложения будут иметь атрибут «AXFullScreen» в своих окнах. Например, это работает для некоторых приложений:

  tell application "System Events"
    tell process "Pages"
        repeat with myWin in windows
            get value of attribute "AXFullScreen" of myWin
        end repeat
    end tell 
end tell

Реальное действие, похоже, связано с угарным газом ... MacWindows.h и CarbonEvents.h содержат ссылки на "FullScreen".

Вы должны будете исследовать это все же.

...