1

我正在创建一个侦听全局事件(按下键)的 OSX 应用程序,使用

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event){       
     //execute this code when keys are pressed
}];

我想执行类似的操作,例如:
我在 safari(或任何其他应用程序)上,在文本字段上输入,然后按“hhh”键。我的应用程序收到一条通知说这些键被按下,它会在我正在输入的文本字段上写下“你好”。

那么,我怎么知道用户在文本字段上键入时按下了“hhh”键,以及如何以编程方式向该文本字段写“你好”?谢谢

4

2 回答 2

0

从记忆中我相信你可以做到这一点,但你需要在系统偏好设置中启用“启用辅助设备访问”。那么你描述的应该是可行的。如果您不这样做,您将不会在全局处理程序上收到任何事件。

于 2012-10-29T06:52:53.363 回答
0

可访问性框架(以及另一个答案中建议的辅助设备)在这里没有提供任何有用的东西。它允许您操作屏幕上的窗口,但不能操作它们的内部视图层次结构(包括 NSTextField)。

您有 2 个选项:您可以使用 SIMBL 或 AppleScript。在操作元素时,您使用 SIMBL 具有更大的灵活性,因此我建议您使用它。SIMBL 允许您编译“调整”库,然后将其加载到您选择的应用程序中,从而有效地允许您覆盖应用程序行为并添加功能。

您可以继续检测应用程序中的全局按键事件,并使用 IPC/XPC 与您的“tweak”库进行通信并通知它修改当前活动的 NSTextField,或者如果您不需要集中管理,您可以将这个逻辑在调整本身。

聚焦的 NSTextField 将-firstResponder在 NSResponder 链中

有关 SIMBL 的更多信息,你可以去这里,或者如果你想使用 AppleScript,这里有一些与在其他应用程序中生成系统(包括按键)事件相关的信息:http ://en.wikibooks.org/wiki/AppleScript_Programming/System_Events

于 2012-10-31T03:22:07.983 回答