API доступности - Какао - PullRequest
       3

API доступности - Какао

2 голосов
/ 19 февраля 2011

Есть ли способ (я думаю, используя Accessibility API), чтобы иметь возможность нажать кнопку / нажатие клавиши в моем приложении, а затем навести курсор мыши на элемент меню и снова нажать, а затем вернуть имя элемента меню,в и приложение?

Я хочу сделать это в Какао / Objective-C (Mac).

1 Ответ

1 голос
/ 19 февраля 2011

Для этого и нужно уведомление kAXMenuItemSelectedNotification. Простой способ поиграть с этим материалом - использовать UI Browser :

  • Выберите приложение во всплывающем меню «Цель».
  • Выберите «Уведомления» из всплывающего меню «Ящик».
  • Нажмите «пункт меню выбран» и «Зарегистрироваться» (или просто дважды щелкните в таблице).
  • Выберите «Журнал уведомлений» в меню «Вид».
  • Переключитесь на выбранное вами приложение и выберите пункт меню.

Это позволяет видеть, когда запускаются уведомления. Ваш код может выглядеть примерно так:

AXError err;
AXObserverRef observer;

pid_t currentAppPID = [NSRunningApplication currentApplication].processIdentifier;
if ( (err = AXObserverCreate(currentAppPID, notificationCallback, &observer) != kAXErrorSuccess); // XXX failed

CFRunLoopAddSource(CFRunLoopGetCurrent(), AXObserverGetRunLoopSource(observer), kCFRunLoopDefaultMode);

AXUIElementRef element = AXUIElementCreateApplication(currentAppPID);
if (element == NULL); // XXX failed
if ( (err = AXObserverAddNotification(observer, element, kAXMenuItemSelectedNotification, NULL)) != kAXErrorSuccess); // XXX failed

Обратите внимание, что вам придется наблюдать за каждым запущенным приложением индивидуально (и дополнительными приложениями, когда они запускаются / выходят), или регистрироваться для NSWorkspaceDidActivateApplicationNotification и отменять регистрацию / регистрацию в самом переднем приложении в этой точке (последнее, вероятно, проще всего при 10.6, потому что вы получаете NSRunningApplication как часть уведомления).

Я думаю, что на самом деле выбор элемента будет проще для пользователя, но если вы действительно хотите нажать другую клавишу, чтобы завершить действие, вы можете наблюдать kAXSelectedChildrenChanged, который будет срабатывать, когда выбор перемещается из одного меню. пункт другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...