API доступа к какао, могу ли я щелкнуть окно в фоновом режиме, не активируя его? - PullRequest
2 голосов
/ 01 мая 2010

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

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

1 Ответ

2 голосов
/ 02 мая 2010

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

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

Quartz Event Services доставит вас туда почти : вы можете создать сигнал события для процесса, которым вы хотите управлять , и вы можете подделать события и отправить их на кран . Подвох в том, что вы можете отправлять события на кран только тогда, когда срабатывает кран , т.е. когда приложение уже имеет событие, с которым нужно иметь дело. Когда это не так, вы застряли.

...