我试图编写一个在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开始正常工作。文档中没有提到针对此案例的具体内容。请帮我解决,并提前感谢。
答案 0 :(得分:0)
试试https://github.com/Yang-Xijie/InputSourceSwitcher
Source Switcher 使用 Applescript 来操作 UI 操作,这比在其他工具中使用 Carbon(大多数 API 已弃用的框架)来更改输入源要好。
您可以在源代码中找到 Applescript 来帮助您以编程方式切换输入源。