Как я могу сделать приложение OS X нефокусируемым, но при этом получать события кликов?

Я разрабатываю приложение для экранной клавиатуры для OS X, похожее на встроенное в операционную систему (Keyboard Viewer). Кажется, я ударился о стену, так как не знаю, как я могу принимать события щелчка от кнопок и не красть фокус у активного в данный момент приложения. Я знаю, что это возможно, поскольку есть приложения, которые уже делают это, например. Нажатия клавиш AssistiveWere.

Итак, мой вопрос заключается в следующем: как я могу заставить свое окно получать события мыши и обрабатывать их без активации?

P.S. Я не очень разбираюсь в разработке OS X, и это мой первый проект Swift, так что извините, если это тривиальная проблема.


person rthor    schedule 05.06.2016    source источник
comment
Вы должны иметь разрешение пользователя на доступ к специальным возможностям. После этого вам необходимо зарегистрировать NotificationListener для получения событий клавиатуры и мыши в масштабе ОС/системы.   -  person    schedule 05.06.2016


Ответы (1)


Вам нужно сделать ваше окно экземпляром NSPanel (или подклассом), включить NSNonactivatingPanelMask в его styleMask и установить becomesKeyOnlyIfNeeded в true. (Маской стиля можно управлять в IB.) Вероятно, вы также хотите, чтобы она была плавающей, чтобы она всегда находилась над обычными окнами, поэтому также установите floatingPanel в значение true.

person Ken Thomases    schedule 05.06.2016
comment
Спасибо! Это именно то, что мне было нужно! - person rthor; 06.06.2016