用C++写了个设置默认输入法的小程序,E文不好,捣鼓几天才终于弄明白了一些了
首先是删除输入法
使用 UnloadKeyboardLayout 卸载Imm32框架的输入法,只作用于当前,重新启动后无效。ITfInputProcessorProfiles::EnableLanguageProfile启用或者禁用Tsf框架的输入法,重新启动后有效
设置默认输入法
使用SystemParametersInfo加SPI_SETDEFAULTINPUTLANG参数,只作用于当前,重新启动后无效。至于Tsf框架设置默认输入法理论上是ITfInputProcessorProfiles::SetDefaultLanguageProfile,可以经过实践,发现根本无效,不过我源码里面的那种方法可以
显示输入法属性配置
Imm32的使用ImmConfigureIME方法,Tsf的使用ITfFnConfigure::Show来显示属性对话框,具体怎么使用看我源码
如果要想添加、删除或者设置默认输入法重启了还能生效的话,需要修改注册表HKEY_CURRENT_USER\Keyboard Layout\Preload,其中值为1的重启之后总是被设置为默认输入法。
如果你想排序的话修改一下HKEY_CURRENT_USER\Software\Microsoft\CTF\SortOrder,这里包括了Imm32和Tsf框架的所有输入法排序
程序有点模仿了系统的那个,正好复习下属性表的使用
源码使用vs2010编译,程序没有保存到注册表,因此设置的默认输入法只作用于当前系统
示例代码下载:http://bbs.pediy.com/showthread.php?t=167731