如何在Mac OS X中过滤和覆盖文本输入

5

我正在尝试找出ObjC代码,以检测OSX用户是否正在文本字段/区域中输入文本。如果是,则想提供特殊的按键绑定和文本扩展。我不是在编写按键记录器。

我已经尝试通过检测光标是否隐藏或者光标模式是否为IBeam来实现这一点,但这并不起作用。例如,Chrome在切换选项卡时隐藏光标,因此用户不处于文本输入模式,但光标已被隐藏,导致误判。

如有帮助,将不胜感激。

谢谢。


你需要添加什么类型的按键绑定和自动完成?OS X的文本系统已经非常强大了,所以如果它不能满足你的需求,你需要小心不要与现有的按键绑定和完成系统发生冲突。此外,你的标签是冗余的和相互矛盾的。你想要一个Cocoa解决方案,Carbon解决方案还是两者兼备?appkit标签是不必要的。 - user57368
1
@Josh Caswell - 现在已经修复了。抱歉,我有一段时间没来这里 :) - Kevin Colyar
@user57368 - 我可以接受任何解决方案。我想使用不同的标签来吸引有不同经验的人。 - Kevin Colyar
3个回答

3

使用辅助功能API,我能够找到当前具有焦点的UI元素,并查看其角色描述以确定它是否为文本输入。


这个链接已经失效了,因此在你的回答中添加代码是非常有用的。 - Kane Cheshire

0

这是一个好主意…然而,我想要检测用户最初进入文本输入状态的时候。我认为这种方法只能在输入文本之后才能检测到。 - Kevin Colyar

0

如果您想要的是可以通过默认键绑定字典或Snow Leopard内置的文本替换功能实现的内容,那么您甚至可能不需要编写应用程序;对于后者,请参见系统偏好设置中的语言和文本窗格上的“文本”选项卡。

由于“文本输入”模式是在应用程序级别定义的,因此无法全局检测用户何时进入该模式。您可以在AppKit框架提供的文本系统中执行某些操作(如上所述),但您将无法影响不使用该框架的应用程序,例如Adobe的应用程序以及Flash电影中的任何文本输入字段(例如,“为高分榜输入您的姓名:”)。系统范围内存在的唯一内容是按键事件,这比文本输入的概念要低级得多,以及安全文本模式[1],它仅适用于密码字段等内容。

[1]: TN2150描述了“安全事件输入”模式的工作原理和手动接口。大多数(Cocoa)应用程序只使用NSSecureTextField,它会为您完成繁重的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接