Как получить текущие координаты фокуса клавиатуры в 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 доступа, чтобы знать, где искать - надеюсь, это поможет.

Другие вопросы по тегам