2014-12-16 5 views
2

Я хочу иметь следующий рабочий процесс:Как перехватывать события из конкретных окон в OSX

  • Пользователь нажимает клавиши, или барное меню состояния кнопки
  • Пользователь нажимает на окне
  • Окна теперь " зарегистрировано»в моем приложении
  • событие App перехватывает мышь из всех зарегистрированных окон

Я много читал на CGEvents, CGEventTaps и NSEvents. Я могу перехватывать глобальные события и публиковать новые, используя CGEvents и CGEventTaps, но в NSEvent нет информации о окнах, такой как windowNumber, только PSD (и я не уверен, как их использовать), поэтому я не могу отфильтровать события из не- Зарегистрированные окна. С другой стороны, NSEvent не позволяет мне перехватывать глобальные события, а только локальные через localMonitor.

Как я могу достичь желаемой функциональности?

ответ

0

Вы можете использовать API доступности для Mac OS X, чтобы получить информацию о окне или приложении, сфокусированном в данный момент.

UIElementInspector Apple Sample Code дает много примеров.

// Given a uiElement and its attribute, return the value of an accessibility object's attribute. 
+ (id)valueOfAttribute:(NSString *)attribute ofUIElement:(AXUIElementRef)element; 

Используйте kAXFocusedApplicationAttribute или kAXFocusedWindowAttribute атрибуты с valueOfAttribute:ofUIElement:, чтобы получить окно/приложение, когда вы «зарегистрировать» его с приложением.

Когда приходит CGEvent, сравните отображаемое в данный момент окно/приложение со списком зарегистрированных окон/приложений, чтобы определить, следует ли перехватывать событие.

 Смежные вопросы

  • Нет связанных вопросов^_^