我正在尝试找出ObjC代码,以检测OSX用户是否正在文本字段/区域中输入文本。如果是,则想提供特殊的按键绑定和文本扩展。我不是在编写按键记录器。
我已经尝试通过检测光标是否隐藏或者光标模式是否为IBeam来实现这一点,但这并不起作用。例如,Chrome在切换选项卡时隐藏光标,因此用户不处于文本输入模式,但光标已被隐藏,导致误判。
如有帮助,将不胜感激。
谢谢。
我正在尝试找出ObjC代码,以检测OSX用户是否正在文本字段/区域中输入文本。如果是,则想提供特殊的按键绑定和文本扩展。我不是在编写按键记录器。
我已经尝试通过检测光标是否隐藏或者光标模式是否为IBeam来实现这一点,但这并不起作用。例如,Chrome在切换选项卡时隐藏光标,因此用户不处于文本输入模式,但光标已被隐藏,导致误判。
如有帮助,将不胜感激。
谢谢。
使用辅助功能API,我能够找到当前具有焦点的UI元素,并查看其角色描述以确定它是否为文本输入。
如果您想要的是可以通过默认键绑定字典或Snow Leopard内置的文本替换功能实现的内容,那么您甚至可能不需要编写应用程序;对于后者,请参见系统偏好设置中的语言和文本窗格上的“文本”选项卡。
由于“文本输入”模式是在应用程序级别定义的,因此无法全局检测用户何时进入该模式。您可以在AppKit框架提供的文本系统中执行某些操作(如上所述),但您将无法影响不使用该框架的应用程序,例如Adobe的应用程序以及Flash电影中的任何文本输入字段(例如,“为高分榜输入您的姓名:”)。系统范围内存在的唯一内容是按键事件,这比文本输入的概念要低级得多,以及安全文本模式[1],它仅适用于密码字段等内容。
[1]: TN2150描述了“安全事件输入”模式的工作原理和手动接口。大多数(Cocoa)应用程序只使用NSSecureTextField,它会为您完成繁重的工作。