2010-04-30 3 views
2

Я искал вечность для решения этого вопроса, поэтому я подумал, что найду мозги больших умов, чем мои. Я разрабатываю приложение Cocoa, которое использует API Accessibility для управления другой программой (это приложение с горячими клавишами). Приложение, которое я контролирую, обычно имеет несколько открытых окон, а некоторые скрыты за другими. То, что я хотел бы сделать, если это возможно, - отправить события мыши в окна с помощью API Accessibility таким образом, чтобы нажимать кнопку в окне, не вынося на передний план (взаимодействовать с окном, но не активировать его) , Причина, по которой я пытаюсь сделать это, заключается в том, что отправка события мыши в это другое окно заставит его перейти на передний план и нарушит взаимодействие пользователя с главным окном.API доступности какао, можно ли щелкнуть окно в фоновом режиме, не активируя его?

Это возможно в Windows - видимо, потому что приложения, подобные моим, делают это там - но у меня возникает ощущение, что это невозможно с помощью Cocoa, учитывая то, как работает оконный менеджер. Я ошибаюсь?

+0

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

+0

Да, я думаю, что вы можете гадать с NSView accetpsFirstMouse для этого, но, очевидно, я не могу изменить использование другого приложения NSView или NSWindow. – Winawer

ответ

2

Доступность более высокого уровня. Вы отправляете, например, AXPress действия на AXButton объектов, но «нажимать» не обязательно щелкнуть мышью на пробеле при сфокусированном виде, например, также «нажмите». AXPress - это действие высокого уровня, которое означает «сделать свою вещь», что, очевидно, имеет смысл для некоторых видов (например, кнопок), а не для других (например, полей).

Доступность активации приложения имеет смысл, когда вы смотрите на нее по назначению: Вспомогательные устройства для пользователей с ограниченными возможностями. Если пользователь «нажимает» что-либо любым способом, они, вероятно, намерены активировать приложение и работать в нем.

Quartz Event Services получит Вас почти там: Вы можете create an event tap for the process you want to control, и вы можете подделать события и send them to a tap. Уловкой является то, что you can only send events to a tap when the tap fires -i.e., когда приложение уже имеет событие для рассмотрения. Когда это не так, вы застряли.

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

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