2011-04-21 78 views
5

我想弄清楚检测OSX中的用户是否将文本输入到文本字段/区域中所需的ObjC代码。如果是,我想提供特殊的键绑定和文本扩展。我没有写关键嗅探器。如何筛选和覆盖Mac OS X中的文本输入

我试过这样做是通过检测光标是否隐藏,或者光标模式是IBeam,但这不起作用。例如,如果Chrome在切换选项卡时隐藏了光标,则会出现误报情况,因此用户不处于文本输入模式,但光标已隐藏。

任何帮助将不胜感激。

谢谢。

+0

你想添加什么样的按键绑定和自动完成? OS X的文本系统已经非常强大,如果它没有做到你需要的东西,你需要小心,不要做任何与现有的键绑定和完成系统冲突的事情。另外,你的标签是多余的和冲突的。你想要一个可可解决方案,碳解决方案,还是两者?而且appkit标签是不必要的。 – user57368 2011-04-21 02:10:46

+1

@Josh Caswell - 现在修好了。对不起,有一段时间没有在这里:) – 2011-04-21 02:28:13

+0

@ user57368 - 我会采取任何解决方案。我认为不同的标签可能会吸引有不同经验的人。 – 2011-04-21 02:29:19

回答

3

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

+0

这个链接现在已经死了,这就是向代码添加代码的原因。 – 2015-08-17 11:41:02

0

您可以通过创建自己的输入法来拦截和覆盖所有文本输入。您可以通过编程(collection of 5 code samples)或text-based rule file(功能较弱的选项)来完成。

+0

这是一个想法...但是,我想检测用户最初何时进入文本输入状态。我认为这种方法只能在文本输入后才能检测到。 – 2011-04-21 04:23:47

0

如果您想要的是the Default Key Bindings dictionary或Snow Leopard内置的文本替换功能,您甚至可能不需要编写应用程序;对于后者,请参阅系统偏好设置中的语言和文本窗格上的文本选项卡。

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

[1]:TN2150描述了“安全事件输入”模式的工作方式以及手动接口。大多数(Cocoa)应用程序只是使用NSSecureTextField,它为您做了很多工作。