objective-c - 触发事件的全局监视器后,如何在聚焦的 NSTextfield(在我的应用程序之外)上写入?

标签 objective-c macos cocoa textfield keyboard-events

我正在创建一个 OSX 应用程序,使用

监听全局事件(按下按键)
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event){       
     //execute this code when keys are pressed
}];

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

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

最佳答案

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

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

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

聚焦的 NSTextField 将是 NSResponder 链中的 -firstResponder

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

关于objective-c - 触发事件的全局监视器后,如何在聚焦的 NSTextfield(在我的应用程序之外)上写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109815/

相关文章:

ios - 如何找到崩溃发生的位置 - ios

ios - 无法生成蒙版图像; CISourceOverCompositing 未按预期工作

ios - 如何创建第二个启动画面(在 ios 中的默认启动画面之后)?

ios - 使用 -fobjc-arc-exceptions 编译的文件中的快速枚举异常安全吗?

macos - 仅当应用程序从 cron 的打开命令打开时处理证书时应用程序出现不合理的系统错误

python - Apple Mail.app 使用插件设置 HTML 签名

ios - 表格 View 动态中的iOS章节数

javascript - 当打包的 Electron 应用程序在 MacOS 上运行时,path.resolve ("") 返回根目录 ("/")

macos - 无法激活 MacPorts 安装的 Zsh

objective-c - 将分隔符颜色更改为背景色或将其从 NSTableView 中删除