将NSString转换为AXUIElementPostKeyboardEvent的keyCode +修饰符

时间:2011-02-09 01:47:16

标签: cocoa unicode nsstring accessibility

编辑:事实证明,在我最初探索辅助功能API时,我被误导了。一旦我在AX层次结构中找到了安全文本字段,我就可以轻松设置该值。除此之外不确定如何处理这个问题,但我想为未来的搜索者更新这个问题。

我正在研究一些代码,这些代码会使用辅助功能API将键盘事件发布到目标应用程序。到目前为止,我已经能够编写一个简单的应用程序,允许我键入一个字符串值,然后将键盘事件与这些键代码一起发布到目标应用程序。实际上,字符串将从另一个位置读取。

我还没有弄清楚的是如何确定是否应该发布修改键和修改键。例如,当我在我的测试应用程序中键入Hello, world!时,输入将作为hello, world1发送到另一个应用程序,因为我还没有包含修饰键来创建大写H和感叹号。通过éü等多键击字符使这种情况变得更加复杂。发送é会发送一个没有重音的原始e

我是否有一个简单的方法可以忽略修饰符与键码相结合以创建特定的NSString或unichar?如果没有,是否有人建议如何进行?到目前为止,我提出的最好的方法是使用所有可能的修饰符组合调用UCKeyTranslate,直到找到与unichar匹配的-[NSString characterAtIndex:]我使用{{1}}我不确定这是否可扩展或者,考虑到如上所述的某些角色的多按键特性,这是可靠的。

提前致谢!

2 个答案:

答案 0 :(得分:1)

这可能无济于事。但以防万一:是否真的有必要发送键盘事件?因为如果你需要支持Kotoeri,这将变得非常困难。

覆盖insertText:和doCommandBySelector:并发送键序列的结果而不是单独的击键是一件简单的事。

答案 1 :(得分:1)

我找到了trick的一个例子,但它不完整:在任何情况下它都不是一般解决方案......如何处理多个键盘布局?

有一个cgquartz过时的功能:CGPostKeyboardEvent(不确定它是否可以只传递char?)可能仍然可以使用(标记为未记录,但有一些副作用但是......)。 / p> 编辑:UCKeyTranslate是一种构建字典的方法。有趣但操作系统如何做到这一点?应该隐藏一个更好的答案!