让 Win8.1 微软拼音新体验模式支持 Metro 应用
内容回顾:
[2]发布个工具,一键恢复Win8/8.1中的微软拼音长句模式(新体验模式)
在 [1] 中,我们找回了 Win8 里的微软拼音新体验模式;在 [2] 中,依照 ePig 提供的方法,我们在 Win8.1 中也搬回了微软拼音新体验模式,但留下了一点遗憾,不支持 Metro 应用。
(其实还有一点,没有显示图标。)
原本我觉得无所谓,因为我反正不太用 Metro 应用,Metro 下就用自带的微软拼音简捷模式好了。可是,可是,输入法管理器中,比如保留一个兼容 Metro 的输入法,导致桌面下也比如保留简捷模式了,这样切换输入法经常切错,离所谓“一个输入法”的伟大目标相差甚远。于是乎,不能忍。然后昨天起来看了下这个问题。
原先微软拼音输入法的一个不知什么的GUID是 {81d4e9c9-1d3b-41bc-9e6c-4b40bf79e35e},该 GUID 代表的输入法下有两个输入模式,新体验和简捷。(这个构架和相关内容我不是很懂,具体请去查阅 TSF (Text Service Framework) 框架相关文档。) Win 8 下只是删除了新体验模式的那个注册表项并对注册表项加权限保护达到禁用目的。Win8.1 下的变化是,老的文件被删除了,且 {81d4e9c9-1d3b-41bc-9e6c-4b40bf79e35e} 被用作新的微软拼音的 GUID 了,里面也不再分两个模式了(其实只有原先的简捷模式)。按照 ePig 提供的方法,从 Win8 中复制相关文件,并把文件中的 GUID 改了,重新注册进去。这边我在一键恢复工具所带的文件中是把 GUID 末尾 e 改为了 f,完整的就是 {81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35F}。按道理应该完全兼容才是,起码 Win8 下是支持 Metro 的。微软拼音很早就是 TSF 框架了(而不是 Imm),据我之前的了解,要支持 Metro,输入法使用 TSF 框架就好了。
想不通的情况下,就来比较下 Win8.1 下自带的微软拼音(简捷模式)和我们新加的微软拼音新体验模式的注册表项差异:
发现自带的多了几项(红框部分)。于是仿照着把这些补上去,结果确实不显示“仅适用于桌面版”了,可是好像也没法输入了……于是每次只加一项,依次试过去(穷举法,鄙视)。最后发现前两个 ,也就是 {13A016DF-560B-46CD-947A-4C3AF1E0E35D}、{25504FB4-7BAB-4BC1-9C69-CF81890F0EF5} 可以要,最后 {74769ee9-4a66-4f9d-90d6-bf8b7c3eb461} 不能要。
再看下 Win8 的,果然也是有这两个 Category 的:
然后这事情就算成了:
一键工具已更新,下载页面:http://www.streamlet.org/Software/MSPYForever/
那么这两个 GUID 到底是什么呢?Google 一下……
关于前者,http://msdn.microsoft.com/zh-cn/library/windows/apps/hh967425.aspx#set_compatibility_flag 中有说明如下:
IME 通过使用 ITfCategoryMgr::RegisterCategory 为其 IME 注册类别 GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT 来声明其兼容 Windows 应用商店应用。
其中 GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT 就是 {13A016DF-560B-46CD-947A-4C3AF1E0E35D}。
{25504FB4-7BAB-4BC1-9C69-CF81890F0EF5} 也是个预定义的值,叫做 GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT,按字面理解,系统托盘支持,可是查不到官方说明啊,http://msdn.microsoft.com/en-us/library/ms629012.aspx 这一页啥也不说,是不是bug……
不管怎么说,问题是解决了。大快人心。
再顺便黑下大微软。
看这张图,我在写代码或写Word或者写别的文字,开着中文语言下的中文输入法(写代码怎么会开中文?不要在意这些细节……),然后来了条 QQ 消息。我去任务栏点企鹅图标。结果刚点下,因为任务栏、桌面是英文语言下的美式键盘,输入法指示器变为 ENG,缩短了,企鹅图标跑右边去了,点空了!!!
正因为如此,我以前总是把英文语言删掉,只有中文语言,下面一个输入法,靠 Shift 在输入法内切换中英文。可是 Shift 很容易误操作有木有。最佳的方式还是中文语言下的美式键盘……这个问题很早之前研究过几个小时,但没啥结果,后来想,如果真的没办法了,干脆写一个空的输入法原样输入输出,叫做“美式键盘”得了。为啥中文下就不给键盘布局呢?为什么呢为什么呢为什么呢?
昨天又去网上搜了下,结果高人已经给出了方法了,不知道哪篇是原创,就不引用了,有兴趣的自己搜。这里还有个半官方的出处:http://answers.microsoft.com/zh-hans/windows/forum/windows_8-ime/windows-8%E7%9A%84%E8%BE%93%E5%85%A5%E6%B3%95/91917117-c5fd-4c61-ac2e-da0dd29d12fc。但其实美式键盘没有图标,会显示“简体”,所以也会有长短变化。最佳的方法还是恢复成语言栏的样子:
这下同在中文语言下了,Ctrl+Shift 切输入法,怎一个舒服了得~!至此,Win8、Win8.1 的输入法问题对我个人而言已经全部解决了,可以大规模重装系统了。
忍不住再黑下大微软:http://answers.microsoft.com/zh-hans/windows/forum/windows_8-ime/%E5%85%B3%E4%BA%8E%E4%B8%AD%E6%96%87%E7%89%88windo/b5c3190f-bb82-4855-97f0-00d6011e3e33,这个答非所问,是不是在搞笑?