且行且远
分类: 佳软天地, 逆向手札 由 ssfighter 于 2007年7月3日 发表

搜狗拼音输入法是一款相当好用的中文拼音输入法,目前新版本已经出到3.0Beta2,最新可支持细胞词库功能(据说还申请专利了),目前有越来越多的人使用搜狗拼音输入法。

我是从搜狗拼音1.5开始使用这款输入法的,但是这款输入法有个比较严重的问题,就是在输入的窗口内不支持ClearType模式,这样如果使用微软雅黑这样的字体的话势必变得非常难看。以3.0Beta2为例,没有使用ClearType时的效果图如下:

事实上,我的计算机已经开启了ClearType模式,这种显示效果完全是不应该出现的。那这种情况是怎么出现的呢?用OllyICE来打开SogouPY.ime文件(实际就是一个动态链接库程序)。可以观察到输入表中有CreateFontIndirectW函数,查阅MSDN知道这个函数的参数中有这样一项lplf.lfQuality,这一项是用来指定字体的显示效果,在3.0Beta2中可以看到这样的语句:
10022E42      C64424 56 05  mov     byte ptr [esp+56], 4

10022EB5      C68424 B60000>mov     byte ptr [esp+B6], 4

在wingdi.h文件中可以找到4对应的是ANTIALIASED_QUALITY。在搜狗拼音3.0Beta1时这个值是3,对应的是NONANTIALIASED_QUALITY。这两种都是没有ClearType的模式,估计这里是为了兼容Win98和更低版本的Windows所做的。实际上,像紫光拼音等输入法都是和桌面的ClearType模式完全一样的,这样看起来效果也非常好。但一个软件考虑到兼容性也无可厚非。

将对应的值改为5,即CLEARTYPE_QUALITY,即可使显示效果变成支持ClearType的模式。显示效果如下:

实际上,或许用微软雅黑的效果还不是特别明显,用宋体20号是最明显的,贴图见下。可以自己试一下。因为微软雅黑在液晶屏上开启ClearType模式前后的对比非常明显,在CRT屏上对比效果差一些。

未开启ClearType的截图:

开启ClearType之后的截图:

当然,将对应的lplf.lfQuality项设置成5是强制开启ClearType,将其设置成0,即DEFAULT_QUALITY,即采用和桌面同样的设置,兼容性会更好一些,我是把他设置成0了,呵呵。

总结一下,对搜狗拼音3.0Beta2来说,如果想让搜狗拼音支持ClearType,只需要用任意一个16进制编辑器打开C:\Windows\System32\SogouPY.ime文件,然后将0x22E46和0x22EBC处的数值改为0即可,这样用搜狗拼音也可以享受ClearType的效果了。对于其他版本的搜狗拼音,用同样的方法自己找一下具体的修改点就可以了。在3.0Beta1中,IDA可以分析出具体的lplf的结构体,3.0Beta2中好像没有识别出来……



发表评论

昵称:  (必须)
邮件:  (必须)
网址: 
评论: