#c #macos
#c #macos
Вопрос:
Я пишу приложение-службу, которое запускается в фоновом режиме и захватывает окно «фокус» в Mac OS X. Окно «фокус» означает, что окно в данный момент получает пользовательский ввод. (в Mac, я думаю, это называется key window
)
В настоящее время я использую CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
для получения списка окон и получения первого окна, чье kCGWindowLayer == 0
. (поскольку список приведен в порядке от начала к концу).
Но это не всегда так. Иногда, если активное приложение выводит немодальное диалоговое окно, немодальное диалоговое окно станет ключевым окном, но это не первое окно с kCGWindowLayer == 0
, поэтому я получу неправильное окно.
Каков правильный метод получения ключевого окна активного приложения? Или обратный вызов уведомления, который может сообщить мне об изменении ключевого окна, также в порядке.
Кроме того, поскольку я работаю в окне, не принадлежащем моему приложению, NSApplication.windowWithWindowNumber может не работать.