2007年1月31日星期三

如何在XP中使用微软雅黑

虽然观感是很个人的问题,但中易宋体的内嵌点阵确实要比微软雅黑来得清晰锐利。不过微软雅黑的意义在于实现了中文字体的ClearType和平滑缩放,这却是中易宋不能比拟的优势。看久了,大概也就习惯了吧。

目前微软雅黑的版本窜到了5.0,但仍有不小改进空间。文字大小参差不齐的情况依然。中文数字“一”在连续出现时会连在一起,如“一一解决”看起来就是个破折号。最难看的是标点符号部分,尤其是左右单、双引号,两对符号形状完全一样,只是略为靠左或靠右。

想在XP中使用Vista的字体,网上流传的方法大多不太完整,要不就显得太为暴力。这里提供一个较为全面的方案,除了尽可能安全外,还解决了如日文和韩文乱码等问题。

首先需要获得Vista的内置字体,简体中文的字体名为微软雅黑,还有繁体中文的微软正黑,日文的Meiryo,韩文的Malgun。这几个字体目前最新的版本都是v5.00,HuangYongTao在他的Blog上有提供下载。

以下是各字体的文件名、文件大小和CRC值,如果已经从其他地方获得了字体文件,可查阅一下自己的是否是最新版本:

Update

v5.0版的韩文字体Malgun在资源管理器中显示的字符偏小,与雅黑和Meiryo配合不佳,不是经常用韩文的人就别装了吧。

网上出现了很多雅黑的修改版本,如碧海潮声的“雅黑宋体”和“极限雅黑”,都宣称解决了若干问题。好不好看大家可以试试,只要不是直接替换宋体的方式,都可以用我这里的脚本来安装,就是字体名需要修改一下。

Windows 7中包含了v6.01版的msyh.ttf和v6.02版的msyhbd.ttf。这个版本解决了姓名连字符“·”显示为方框的问题,降低破折号笔画高度以示与中文数字“一”的区别(但“一一说明”中的“一”还是连着的),似乎也部分解决了在XP中撑大对话框的问题。不过我总觉得这一版字体的颜色变淡了,另外标点符号也没有变化。

v6版雅黑我找到了一个Rayfile下载地址,这是一个安装包,即使系统内已存在雅黑也可以完成替换。如果不放心,也可以用7-Zip打开并解压缩手动安装。我想其他字体在Windows 7中应该也有更新的吧,等找到再说。

文件名尺寸CRC
v6.0X
msyh.ttf(6.01)21,719,9805C83D8E6
msyhbd.ttf(6.02)14,602,860C861592C
v5.0
msyh.ttf15,044,4408954581A
msyhbd.ttf14,685,87641CDF7AB
v5.0
msjh.ttf14,713,704A634C5A2
msjhbd.ttf14,509,688E9DA1497
v5.0
meiryo.ttc7,815,29279FA7E43
meiryob.ttc8,054,096C386FBC6
v5.0
malgun.ttf4,337,10465B587BE
malgunbd.ttf4,513,520F1F5ED97

将获得的字体放入C:\Windows\Fonts目录即可完成安装。除了微软雅黑外,其余字体并非必须。这里多嘴说一句,虽然微软正黑体中也包含了简体字,但由于该字体是根据台湾教育部标准字形进行制作的,笔画标准会与大陆通行的有所不同。因此并不建议以微软正黑作为日常使用的字体,尤其是不应该给在校学生使用。

然后打开控制面板,显示、外观、效果,将字体边缘平滑设为“清晰”,这是为了打开Windows的ClearType字体描绘功能。确定后在“高级”中将所有能改字体的项目都改为微软雅黑,字体尺寸可维持不变。再在IE菜单上选工具、Internet选项,常规页上选字体,将网页字体设为微软雅黑。

经过如上设置后,系统的大部分内容都会用微软雅黑进行描绘了。如觉得显示效果还不够理想,可在绿色下载站下载ClearType Tuning进行微调。如果链接失效,在搜索引擎里找“字体清晰工具”也能找到下载链接。个人觉得用这个工具将雅黑的黑度增加一些,看起来比较不会累。

接下来的设置就需要修改注册表了,如果这对你来说有点困难的话,可以在本文最后下载我写的修改脚本。

运行注册编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize,将GUIFont.Facename的键值改为微软雅黑。这一键值会影响部分通用GUI元素所使用的字体,例如按钮、记事本等等。

再定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink,新建一条名为“Microsoft YaHei”的多字符串值,将“gulim.ttc,gulim”和“MSGOTHIC.TTC,MS UI Gothic”以回车分隔写入。这里我懒得bq了,不明白的话参考同项中的Tahoma等字体的写法就知道了。

这一步类似于Linux中常说的字体替换,Gulim为XP附带的韩文字体。微软雅黑中并不包含所有的日文及韩文字符,如缺少了这一步,文件管理器中的日文及韩文文件名就会是方块。gulim.ttc和msgothic.ttc是XP附带的韩文和日文字体,当然也可以替换为Vista的Malgun和Meiryo。

如定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes,新建一个名为“宋体”的字符串值,并设置为“Microsoft YaHei”,可使系统在更多地方使用微软雅黑。例如登录界面中的“欢迎使用”四个大字,还有部分直接汉化EXE文件的程序。不过该方法仍然无法使系统全面使用微软雅黑,IE中还会出现宋体与微软雅黑相杂的情况,是否使用请自行选择。

另外还有HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Codepage下的932、936、949、950子键,这些子键控制了对应代码页下的默认文字字体,FixedWidthFont为等宽字体,ProportionalFont为矢量字体。936为简体中文代码页,可将对应键值改为微软雅黑。932是日文代码页,949是韩文代码页,950是繁体中文代码页。

最后是HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts下的23、24、25、26。这些子键控制了IE中声明了页面语言,但没有指定文字字体的页面用什么字体进行描绘,也就是对应繁体中文、日文、韩文的“默认字体”。实际上Internet选项中进行的修改,就是保存在这里。

以上这些就是我在注册表中找到的所有有关字体的设置。需要注意的是,即使进行了上述修改,也没办法做到使XP系统全面使用微软雅黑。因为只要该字体存在,部分在资源文件中指定使用宋体的程序,仍然不会用微软雅黑进行显示。

如果非要不可也有两个办法可以解决。一则是用字体编辑工具,将微软雅黑的字体名改为“宋体”,并删除系统中原来的simsun.ttc文件。不过这已经超过了本文所想涉及的范围,有兴趣的可以自己查阅相关信息试一下。第二个办法就是直接将simsun.ttc文件删掉。这个办法同样可以使几乎所有的文字用微软雅黑进行显示,不过后遗症是可能有部分文字会显示为方框。如何取舍,可以自己斟酌着办。

为了使用方便,我写了一个自动完成注册表的修改和恢复工作。如已安装了中日韩三地的四个字体文件,直接双击该脚本即可自动完成上述的所有修改工作。如想要恢复系统原始设置,用文本编辑器打开脚本,将bRestore设置为true并再次运行脚本即可。如果只想安装微软雅黑,也可以打开脚本编辑一下参数再运行。

sSC = "Microsoft YaHei"
sSCl = "微软雅黑"
sSCf = "msyh.ttf"

sTC = "Microsoft JhengHei"
sTCl = "微軟正黑體"
sTCf = "msjh.ttf"

sJP = "Meiryo"
sJPf = "meiryo.ttc"

sKR = "Malgun Gothic"
sKRf = "malgun.ttf"

bTC = 1 ' 是否安装了微软正黑字体,如否请将1改为0
bJP = 1 ' Meiryo,日文字体
bKR = 1 ' Malgun Gothic,韩文字体

bRestore = false ' 反安装则改为true

set oSh = wscript.createobject("WScript.Shell")
sub WriteReg()
  if bRestore then
    if sVal <> "" then
      oSh.run "reg add """ + sPath + """ /f /v """ + sKey + """ /t " + sType + " /d """ + sVal + """", 0
    else
      oSh.run "reg delete """ + sPath + """ /f /v """ + sKey + """", 0
    end if
  else
    oSh.run "reg add """ + sPath + """ /f /v """ + sKey + """ /t " + sType + " /d """ + sNVal + """", 0
  end if
end sub

' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize"

sKey = "GUIFont.Facename"
sType = "REG_SZ"
sVal = "宋体"
sNVal = "微软雅黑"

call WriteReg
' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes"

sKey = "宋体"
sType = "REG_SZ"
sVal = ""
sNVal = "Microsoft YaHei"

call WriteReg
' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink"

sKey = "Microsoft YaHei"
sType = "REG_MULTI_SZ"
sVal = "gulim.ttc,gulim\0MSGOTHIC.TTC,MS UI Gothic\0mingliu.ttc,PMingLiU\0"
sNVal = ""
if bKR = 1 then
  sNVal = sNVal & "malgun.ttf,Malgun Gothic\0"
else
  sNVal = sNVal & "gulim.ttc,gulim\0"
end if
if bJP = 1 then
  sNVal = sNVal & "meiryo.ttc,Meiryo\0"
else
  sNVal = sNVal & "MSGOTHIC.TTC,MS UI Gothic\0"
end if
if bTC = 1 then
  sNVal = sNVal & "msjh.ttf,Microsoft JhengHei\0"
else
  sNVal = sNVal & "mingliu.ttc,PMingLiU\0"
end if

call WriteReg
' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Codepage\932"

sKey = "FixedWidthFont"
sType = "REG_SZ"
sVal = "MS Gothic"
sNVal = "Meiryo"

if bJP = 1 then call WriteReg
' --------
sKey = "ProportionalFont"
sType = "REG_SZ"
sVal = "MS PGothic"
sNVal = "Meiryo"

if bJP = 1 then call WriteReg
' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Codepage\936"

sKey = "FixedWidthFont"
sType = "REG_SZ"
sVal = "新宋体"
sNVal = "微软雅黑"

call WriteReg
' --------
sKey = "ProportionalFont"
sType = "REG_SZ"
sVal = "宋体"
sNVal = "微软雅黑"

call WriteReg
' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Codepage\949"

sKey = "FixedWidthFont"
sType = "REG_SZ"
sVal = "GulimChe"
sNVal = "Malgun Gothic"

if bKR = 1 then call WriteReg
' --------
sKey = "ProportionalFont"
sType = "REG_SZ"
sVal = "Gulim"
sNVal = "Malgun Gothic"

if bKR = 1 then call WriteReg
' ========
sPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Codepage\950"

sKey = "FixedWidthFont"
sType = "REG_SZ"
sVal = "MingLiu"
sNVal = "Microsoft JhengHei"

if bTC = 1 then call WriteReg
' --------
sKey = "ProportionalFont"
sType = "REG_SZ"
sVal = "New MingLiu"
sNVal = "Microsoft JhengHei"

if bTC = 1 then call WriteReg
' ========
sPath = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\23"

sKey = "IEFixedFontName"
sType = "REG_SZ"
sVal = "GulimChe"
sNVal = "Malgun Gothic"

if bKR = 1 then call WriteReg
' --------
sKey = "IEPropFontName"
sType = "REG_SZ"
sVal = "Gulim"
sNVal = "Malgun Gothic"

if bKR = 1 then call WriteReg
' ========
sPath = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\24"

sKey = "IEFixedFontName"
sType = "REG_SZ"
sVal = "MS Gothic"
sNVal = "Meiryo"

if bJP = 1 then call WriteReg
' --------
sKey = "IEPropFontName"
sType = "REG_SZ"
sVal = "MS PGothic"
sNVal = "Meiryo"

if bJP = 1 then call WriteReg
' ========
sPath = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\25"

sKey = "IEFixedFontName"
sType = "REG_SZ"
sVal = "MingLiu"
sNVal = "Microsoft JhengHei"

if bTC = 1 then call WriteReg
' --------
sKey = "IEPropFontName"
sType = "REG_SZ"
sVal = "New MingLiu"
sNVal = "Microsoft JhengHei"

if bTC = 1 then call WriteReg
' ========
sPath = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\26"

sKey = "IEFixedFontName"
sType = "REG_SZ"
sVal = "新宋体"
sNVal = "微软雅黑"

call WriteReg
' --------
sKey = "IEPropFontName"
sType = "REG_SZ"
sVal = "宋体"
sNVal = "微软雅黑"

call WriteReg
' ========

没有评论 :