Как получить текущие координаты фокуса клавиатуры в API доступности Mac OS X?
Я ищу API специальных возможностей Mac OS X, чтобы получить координаты расположения текущего фокуса клавиатуры (не мыши). Согласно странице 2 документа, который я нашел по адресу http://www.apple.com/accessibility/pdf/Mac_OS_X_Tiger_vpat.pdf, это выполнимо:
Поддерживается: Mac OS X предоставляет доступ к текущему расположению клавиатуры и мыши вспомогательным технологиям через Accessibility API, а также предоставляет визуальную индикацию фокусировки на экране.
Несмотря на заявление выше, я не могу найти сам API. Я опытный разработчик (программирую с 1982 года), но никогда не работал на Mac OS X; Пожалуйста, будьте нежны.
1 ответ
OSX, похоже, имеет API асимметричной доступности; вы можете использовать NSAccessibilityProtocol, чтобы сделать ваше собственное приложение доступным, но для доступа к другому приложению вы должны использовать отдельный набор интерфейсов / объектов, AXUIElement и друзей.
Я нашел статью о восстановлении окна, которое имеет фокус, который может быть полезен здесь: кажется, ключевые шаги:
- Используйте AXUIElementCreateSystemWide, чтобы создать "общесистемный" объект доступности
- Спросите этот объект для текущего приложения, вызвав
AXUIElementCopyAttributeValue
проситьkAXFocusedApplicationAttribute
-
Спросите возвращенный объект для сфокусированного окна снова, используяAXUIElementCopyAttributeValue
, но на этот раз дляNSAccessibilityFocusedWindowAttribute
- на самом деле похоже, что вы можете пропустить этот шаг ниже и перейти прямо от сфокусированного приложения к сфокусированному элементу пользовательского интерфейса... - Спросите возвращенный объект о текущем фокусированном элементе, снова используя тот же API, но на этот раз с
NSAccessibilityFocusedUIElementAttribute
- Попросите этот элемент для его kAXSizeAttribute / kAXPositionAttribute
Возможно, вы также захотите проверить исходный код для UIElementInspector, который отображает информацию об элементе под указателем мыши (хотя, похоже, он ничего не делает с фокусом).
Также похоже, что вам нужно будет включить API специальных возможностей либо через графический интерфейс (см. Статью выше), либо через терминал, чтобы любое из вышеперечисленного работало - вероятно, это должно дать пользователям защиту от мошеннических приложений, контролирующих их рабочий стол.
Я не использовал ничего из этого лично (пока); но я достаточно знаком с API доступа, чтобы знать, где искать - надеюсь, это поможет.