【发布时间】:2014-05-18 02:57:00
【问题描述】:
我正在尝试编写一个在 OS X 上切换输入法的程序。正常布局没有问题。例如。此代码有效(为简洁起见,去掉了 CFReleases/CFRetains):
TISInputSourceRef getref(char* id) {
CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, id, kCFStringEncodingUTF8);
CFStringRef keys[] = { kTISPropertyLocalizedName };
CFStringRef values[] = { name };
CFDictionaryRef dict = CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, 1, NULL, NULL);
CFArrayRef array = TISCreateInputSourceList(dict, true);
return (TISInputSourceRef) CFArrayGetValueAtIndex(array, 0);
}
int main() {
TISSelectInputSource(getref("U.S. International - PC"));
}
但是当我选择输入法而不是布局时:
TISSelectInputSource(getref("Hiragana"));
发生了奇怪的事情:在菜单栏中正确选择并显示了 IM,但是它没有启用(键入会产生罗马字母而不是日语)。如果我然后切换到任何其他应用程序并返回 IM 开始正常工作。文档没有提及此案例的任何具体内容。请帮我修复它并提前感谢。
【问题讨论】:
-
谢谢,克里斯,但不一样。这个问题基本上是“我如何切换输入源”,而我的问题是“我知道如何切换输入源,但是当它是输入法而不是简单布局时为什么它不切换”。
-
好的,我已经撤回了结束投票。
-
“布局”是什么意思?你是说风景吗?
-
我正在尝试使用来自developer.apple.com/library/mac/documentation/TextFonts/… 的术语:“键盘输入源,包括键盘布局、键盘输入法和输入模式”。基本上我在布局下的意思是“只能使用键盘输入的字母,例如'a'”。在输入法下,我的意思是“需要输入特殊应用程序的字母,例如'あ',后者使用加载并应用于输入的 /System/Library/Input Methods/Kotoeri.app/Contents/MacOS/Kotoeri 应用程序盒子”。