2

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

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

4

1 回答 1

2

可访问性比这更高。例如,您向对象发送AXPress动作AXButton,但“按下”不一定是点击——例如,在视图聚焦时按下空格键也是“按下”。AXPress是一个高级动作,意思是“做你的事”,这显然对某些视图(例如按钮)而不是其他视图(例如字段)有意义。

当您从其预期目的来看时,激活应用程序的可访问性确实有意义:残疾用户的辅助设备。如果用户以任何方式“按下”某些东西,他们可能打算激活应用程序并在其中工作。

Quartz Event Services将助您一臂之力:您可以为要控制的进程创建一个事件抽头,您可以伪造事件并将它们发送到一个抽头。问题是您只能在点击触发时向点击发送事件——即,当应用程序已经有事件要处理时。如果没有,你就被卡住了。

于 2010-05-02T00:03:43.370 回答