Cocoa可访问性API,我可以在后台单击窗口而不激活它吗?

时间:2010-04-30 21:56:10

标签: cocoa macos accessibility accessibility-api

我一直在寻找解决这个问题的方法,所以我想我会找到比我更聪明的脑力。我正在开发一个Cocoa应用程序,它使用Accessibility API来操作另一个程序(它是一个热键应用程序)。我控制的应用程序通常打开多个窗口,其中一些隐藏在其他窗口后面。如果可能的话,我想做的是使用Accessibility API将鼠标事件发送到窗口,按下窗口中的按钮而不将其带到前台(与窗口交互但不激活它) 。我试图这样做的原因是将鼠标事件发送到另一个窗口将强制它到前台并破坏用户与最前面窗口的交互。

这在Windows上是可行的 - 显然,因为类似于我的应用程序在那里做 - 但我觉得这对于Cocoa是不可能的,因为窗口管理器的工作方式。我错了吗?

1 个答案:

答案 0 :(得分: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 - 即,当应用程序已经有一个事件需要处理时。如果没有,你就会陷入困境。