English 中文(简体)
将NSString转换为AXUIElementPostKeyboardEvent的keyCode+修饰符
原标题:Converting NSString to keyCode+modifiers for AXUIElementPostKeyboardEvent

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

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

我还没能弄清楚的是,如何确定是否以及哪些修改键也应该发布。例如,当我键入<code>Hello,world输入到我的测试应用程序中,输入以hello,world1的形式发送到另一个应用程序,因为我还没有包括用于创建大写H和感叹号的修饰符键。这是双重复杂的多击键字符,如éü。例如,发送<code>é

有没有一个简单的方法我忽略了,用来识别要与键代码组合的修饰符,以创建特定的NSString或unichar?如果没有,是否有人建议如何进行?到目前为止,我想到的最好的方法是用所有可能的修饰符组合调用UCKeyTranslate,直到我找到一个与unichar匹配的修饰符。我使用-[NStringcharacterAtIndex:]。不过,考虑到上面提到的一些字符的多击键特性,我不确定这是否可扩展或可靠。

提前感谢!

问题回答

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

覆盖insertText:和doCommandBySelector:并发送键序列的结果,而不是单个击键,这很简单。

我找到了一个执行技巧但它是不完整的:无论如何,它都不是一个通用的解决方案……这怎么能处理多个键盘布局?

有一个cgquartz过时的函数可以做到这一点:CGPostKeyboardEvent(不确定是否可以只传递字符?)可能仍然可以使用(标记为未记录,但有一些副作用)。

编辑:UCKeyTranslate作为一种建立字典的方法。有趣的是,操作系统是如何做到这一点的?一个更好的答案应该藏在某个地方!





相关问题
Why are there duplicate characters in Unicode?

I can see some duplicate characters in Unicode. For example, the character C can be represented by the code points U+0043 and U+0421. Why is this so?

how to extract characters from a Korean string in VBA

Need to extract the initial character from a Korean word in MS-Excel and MS-Access. When I use Left("한글",1) it will return the first syllable i.e 한, what I need is the initial character i.e ㅎ . Is ...

File open error by using codec utf-8 in python

I execute following code on windows xp and python 2.6.4 But it show IOError. How to open file whose name has utf-8 codec. >>> open( unicode( 한글.txt , euc-kr ).encode( utf-8 ) ) Traceback ...

UnicodeEncodeError on MySQL insert in Python

I used lxml to parse some web page as below: >>> doc = lxml.html.fromstring(htmldata) >>> element in doc.cssselect(sometag)[0] >>> text = element.text_content() >>>...

Fast way to filter illegal xml unicode chars in python?

The XML specification lists a bunch of Unicode characters that are either illegal or "discouraged". Given a string, how can I remove all illegal characters from it? I came up with the following ...

热门标签