创建与不同语言输入法交互的键盘事件

Creating keyboard events that interact with different language input methods

提问人:Locksleyu 提问时间:11/4/2023 最后编辑:Locksleyu 更新时间:11/4/2023 访问量:32

问:

我有一个需要生成击键的 Mac 应用程序,并且正在使用 CGEventCreateKeyboardEvent()、CGEventKeyboardSetUnicodeString() 和 CGEventPost() 执行此操作。这适用于英语,但是如果我将键盘输入法更改为非英语语言,我创建的击键将显示为英语,而不是通过我设置的语言。

例如,当我输入“a”键时,如果我设置日语,我希望看到“あ”,但我看到的是“a”。

是否可以让这些 API 通过当前启用的任何输入法?或者我需要不同的 API 吗?

这是相关代码。变量“s”是包含相关字符的字符串。在上面的示例中,它只是“a”。

NSRange composedRange = [s rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, s.length)];
unichar *characters = malloc(sizeof(unichar) * composedRange.length);
[s getCharacters:characters range:composedRange];
CGEventRef eventRef = CGEventCreateKeyboardEvent( nil, 0, true );
CGEventKeyboardSetUnicodeString(eventRef, composedRange.length, characters);
CGEventPost(kCGSessionEventTap, eventRef);
Objective-C macOS 键盘 国际化 keyboard-events

评论

1赞 Willeke 11/4/2023
请发布您的代码。
0赞 Locksleyu 11/4/2023
更新了一些代码。
0赞 Willeke 11/4/2023
你试过吗?或者你试过没有?sCGEventKeyboardSetUnicodeString
0赞 Locksleyu 11/4/2023
是的,我尝试过没有 CGEventKeyboardSetUnicodeString(只需在以前的 API 中输入“a”),这没有效果。用 あ 替换 s 有效,但这不是我想做的。我想模拟击键,所以我希望“a”就像按下了那个键一样,通过配置的任何语言(可以是中文、韩语等)。换句话说,我希望我的应用程序完全按照键盘上的“a”键执行操作。
0赞 Willeke 11/4/2023
一个没有对我有用的事件。CGEventKeyboardSetUnicodeString

答: 暂无答案