被微软的输入法打败了
在做TabIMSwitch的新版本的时候,彻底被微软的输入法体系搞郁闷了。
我现在有两个可用的Windows XP系统,一个是我的笔记本,XP Pro 中文版,一个是公司的机器,XP Pro英文版,两台机器都单独装了微软拼音2003(公司因为Office是英文,默认不带微软拼音;笔记本因为不愿用盗版,所以只装了Viewer,也要单独装微软拼音)。本来这个应该非常常见的情况,可是在测试TabIMSwitch的时候被彻底的搞郁闷了。
这个新版本的目的主要是为了解决smth上面有网友提出说不希望自动添加英文Locale。之前我做了一个TabIMSwitch 1.1.0.1的内部版本,这个在我的中文系统上面工作的很好。但是网友回复说仍然不能工作,后来调查之后发现可能是因为英文系统的缘故。然后果然在公司的英文XP上面重现了出来。从目前的情况来看,可能的结果就是在英文XP系统上面带有的微软拼音2003都无法支持,如果不想自动添加英文Locale的话。
造成这个问题的原因很有意思,说起来应该从TabIMSwitch的工作方式开始。
TabIMSwitch的工作机理很简单:TabIMSwitch由两个主要的部分,一个是前端的content\firefoxOverlay.xul及其带有的一批js文件,另一个就是用C++写成的XPCOM组件,位于src\tabimswitch目录下面。两者之间通过Firefox的XPConnect机制联系。XPCOM最初做的很简单,只是封装了一下Windows的KeyboardLayout的系列函数。当Firefox启动之后,会自动加载XPCOM组件和前端的xul文件,并且在xul当中进行必要的消息的hook。当TabIMSwitch发现当前的标签页发生了变化的时候,就会获取到Firefox当前的输入法状态,并将其存入到一个列表当中,然后从这个列表当中获取即将切换到的标签页的输入法(以前保存下来的),并且将其设置成Firefox的当前输入法。
问题在于,微软关于输入法的说明非常的零散,不过基本上围绕在Keyboard Layout和IME两节当中。根据文档的描述,微软拼音输入法和“中文-美式键盘”之间的区别就在于它们是不同的Keyboard Layout。因此,只要存下来这个Keyboard Layout就OK了。TabIMSwitch 1.0.*系列也是这么实现的。
但是就是这种简单的实现在英文版XP+微软拼音输入法上面不工作,经过跟踪之后发现,原因竟然在于,在这种环境下面微软拼音和“中文-美式键盘”之间是完全相同的:无论通过GetKeyboardLayout函数还是GetKeyboardLayoutName函数,得到的都是相同的Keyboard Layout。当时在1.0.*系列当中为了解决这个问题,就自动Load了一个04090409的Keyboard Layout,也就是“英文-美式键盘”,来避免和微软拼音的冲突。所以就有了前面网友提出的那个问题。
后来考虑是不是可以通过IME接口来对输入法进行更加细致的控制,结果非常无奈:似乎对于IME接口来说,微软拼音和“中文-美式键盘”也是相同的。我找到了微软MSDN当中提供的一个sample,揭示了IME接口的使用方式。但是就使这个示例程序,在我的英文XP下面也歇菜了。
目前只能说:完全被微软自己的两个东西搞疯掉了。
wow gold
wow power leveling
google排名
google排名
google左侧排名
google左侧排名
中国福利彩票
双色球
中国体育彩票
中彩网
租房
租房
北京租房
北京租房
保洁
保洁
保洁公司
保洁公司
cheap wow powerleveling
cheap wow powerleveling
cheap wow powerleveling
cheap wow powerleveling
cheap wow power leveling
cheap wow power leveling
cheap wow power leveling
cheap wow powerlevel
cheap wow powerlevel
cheap wow powerlevel
cheap wow powerlevel
cheap wow power level
cheap wow power level
cheap wow power level
cheap wow power level
cheap wow power leveling
powerlevel
powerlevel
powerlevel
powerlevel
power level
power level
power level
power level
wow powerlevel
wow powerlevel
wow powerlevel
wow powerlevel
wow power level
wow power level
wow power level
wow power level
cheap powerlevel
cheap powerlevel
cheap powerlevel
cheap powerlevel
cheap power level
cheap power level
cheap power level
cheap power level
cheap powerleveling
cheap powerleveling
cheap powerleveling
cheap powerleveling
cheap power leveling
cheap power leveling
cheap power leveling
cheap power leveling
powerleveling wow
powerleveling wow
powerleveling wow
powerleveling wow
power leveling wow
power leveling wow
power leveling wow
power leveling wow -408454829914603