自制WINDOWS7输入法
陈代国
WINDOWS7自带的输入法并不多,常用的五笔输入法就没有,OFFICE2007中也没有,Office2003只有32位版本.在WINDOWS7x64系统下,很多输入法都或多或少存在一些兼容性问题,以下介绍一种WINDOWS7输入法的自制方案,由此方案产生的输入法与WINDOWS7内置的输入法完全一致,不存在兼容问题,也没有系统垃圾产生,完全绿色而且极具个性化.
1 自制码表
Windows7输入法码表与原来的WINDOWSXP不完全一样,其样式可参考%programFiles%\Windows NT\TableTextService\下的各种码表文件,依照相应的格式,就可以自制自己的输入法码表.通常有两种方法:
(1)利用现有的支持WINDOWS7的输入法,修订成具有自己个性的输入法.比如五笔字型,可以先安装如极品五笔,海峰五笔等等,安装之后,在%programFiles%\Windows NT\TableTextService\文件夹下能找到相应的码表文件,这是一个文本文件,打开它可以对其进行编辑,如在词库编码部分增加自己的一些常用词组等.当然如果这种输入法在WINDOWS7下用得很顺手,这样改造一下就可以了,将修改后的码表备份,下次安装将其覆盖相应的文件就可以继续使用了.如果要将其改造成自己的码表,可用VS.net自带的工具GUID生成器生成GUID编码,然后更改码表文件中的GUID码,以免与所安装的输入法重复,其中可修改的部分为附录中红色部分,其中GuidProfile是必须更改的.如果GUID码无法生成器产生,也可以随便更改其中一两个字符.保存的文件名要与KeystrokeFile和DictionaryFile所指定文件名一致.
(2)利用WINDOWS XP或WINDOWS98输入法和码表转换工具生成新的码表文件,这一过程要麻烦一些,主要是须对词库编码进行改造.首先是在WINDOWS7或WINDOWSXP安装相应的输入法并找到相应的以.MB为扩展名的XP码表文件.然后WINDOWSXP或WINPE系统下利用输入法生成器IMEGEN对.MB的XP码表进行逆转换,可得到一个含有词库编码的文本文件,打开此文件,删除其中的表头部分,只留下词库编码,按UTF-8编码另存为一个文本文件,如D:\WINWB861.txt.再可将其内容复制到EXCEL中,编制VB宏将其转换为WINDOWS7 码表格式.如果熟悉VS.net,可利用以下VB.net代码生成新的WINDOWS7码表文本文件.最后将码表头文件内容添加到上面,按UNICODE编码另存为新的WINDOWS7码表文件.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'读入文件: D:\WINWB861.txt,其编码为UTF-8,码表格式为:工a,式aa,…
Dim i, j, k, t As Integer
Dim sr As StreamReader = New StreamReader("D:\WINWB861.txt", False)
Dim strRecords(25300),strBM(25300),strHZ(25300) As String’码表词库量为25300
i = 0
Do While sr.EndOfStream = False '直到读完整个流
strRecords(i) = sr.ReadLine: i += 1
Loop
sr.Close()
'第一步去汉字
For i = 0 To 25300
If strRecords(i) = "" Then Exit For
k = 0
For j = 1 To VB.Len(strRecords(i))
t = Asc(VB.Mid(strRecords(i), j, 1))
If t < 97 Or t > 122 Then
k += 1
Else
strBM(i) = VB.Right(strRecords(i), VB.Len(strRecords(i)) - k)
Exit For
End If
Next
Next
'第二步,去掉编码中的重码
For i = 0 To 25300
If strBM(i) = "" Then Exit For
k = 0
For j = 1 To VB.Len(strBM(i))
If VB.Mid(strBM(i), j, 1) = " " Then
strBM(i) = VB.Left(strBM(i), j - 1)
End If
Next
Next
'第三步去编码
For i = 0 To 25300
If strRecords(i) = "" Then Exit For
k = 0
For j = 1 To VB.Len(strRecords(i))
t = Asc(VB.Mid(strRecords(i), j, 1))
If t < 97 Or t > 122 Then
k += 1
Else
strHZ(i) = VB.Left(strRecords(i), k):Exit For
End If
Next
Next
'写
Dim sw As StreamWriter = New StreamWriter("D:\winwb86Han.txt", False) '创建文件
Dim strTemp As String = ""
For i = 0 To 25300
strTemp = strTemp & strBM(i) & "=+" & strHZ(i) & "+" & Chr(13)‘完成后将+号替换成”
Next
sw.WriteLine(strTemp) '使用默认密码加密
sw.Flush() : sw.Close()
MsgBox("执行完成!")
End Sub
2 更改码表文件头
在[System]部分,更改Display Description为直接汉字描述,删除IconIndex=ICON_JPWB字段,添加Enable=1(启用此输入法), Icon指定输入法的图标,图标的制作可以用自己个性化的图片通过软件IconWorkshop生成32X32 RGBA和16x16 RGBA, 如果不指定图标WINDOWS会将显示内置输入法的第0个图标.IconIndex=0(因为只有一个图标)
在[Configuration]部分,置MakePhraseFromText=1可启用输入法的词组联想功能,添加Composition.ConversionOnlyOneItem=1可实现五笔四码上屏.
其它可更改的部分是附录中红色的GUID.
3 添加自定义的词组
按照码表中编码方案,将自定义的词组录入到一个新文本文件中,录完后复制码表文件的[Text]之后.再将此码表文件保存为与码表文件中KeystrokeFile和DictionaryFile所指定文件名一致的文本文件.
自定义词组的编码也可以用上面提到的输入法生成器自动生成编码,再导出到文本文件中,进而转换成WINDOWS7格式的码表文件.
4 输入法的生成
(1)复制文件 如果是32位系统,将生成的码表文件如TableTextServiceSimplifiedwbzx86.txt复制到%programFiles%\Windows NT\TableTextService\ TableTextServiceSimplifiedwbzx86.txt,将制作的图标文件如wbzx86.ico复制到ICON指定的文件夹下如: Icon=%programFiles%\Windows NT\TableTextService\zh-CN\wbzx86.ico.如果是x64系统,则同时将上述两个文件复制到相应的%programFiles% (x86)\Windows NT\TableTextService下
(2)注册输入法 运行CMD,进行DOS命令窗口模式,再进入%programFiles%\Windows NT\TableTextService\文件夹,运行Rundll32 TableTextService.dll RegisterProfile TableTextServiceSimplifiedwbzx86.txt即可实现输入法注册.如果为x64系统,则同时进入%programFiles% (x86)\Windows NT\TableTextService\文件夹,运行Rundll32 TableTextService.dll RegisterProfile TableTextServiceSimplifiedwbzx86.txt
5 输入法卸载
与输入法的生成一样,在DOS窗口下进入相应文件夹,运行Rundll32 TableTextService.dll UnregisterProfile TableTextServiceSimplifiedwbzx86.txt,再将相应的文件ableTextServiceSimplifiedwbzx86.txt和wbzx86.ico文件删除.
6 制作安装文件
(1) 制作WINDOWS安装用的脚本文件 打开记事本,将上述操作的脚本代码添加上去:
copy TableTextServiceSimplifiedwbzx86.txt "%programFiles%\Windows NT\TableTextService\TableTextServiceSimplifiedwbzx86.txt"
copy zh-CN\wbzx86.ico "%programFiles%\Windows NT\TableTextService\zh-CN\wbzx86.ico"
copy TableTextServiceSimplifiedwbzx86.txt "%programFiles% (x86)\Windows NT\TableTextService\TableTextServiceSimplifiedwbzx86.txt"
copy zh-CN\wbzx86.ico "%programFiles% (x86)\Windows NT\TableTextService\zh-CN\wbzx86.ico"
c:
cd %programFiles% (x86)\Windows NT\TableTextService\
Rundll32 TableTextService.dll RegisterProfile TableTextServiceSimplifiedwbzx86.txt
cd %programFiles%\Windows NT\TableTextService\
Rundll32 TableTextService.dll RegisterProfile TableTextServiceSimplifiedwbzx86.txt
将该文本文件保存为WbzxSetupx64.对于32位系统则可以去掉上面蓝色部分, 并将文件另存为wbzxSetupx86.cmd.并注意到复制的目标路径要用双引号括起来.
类似地,制作一个卸载程序,其代码如下,同样的32位系统可去掉蓝色部分代码,将其分别保存在为wbzxUninstallx64.cmd和wbzxUninstallx86.cmd.
c:
cd %programFiles%\Windows NT\TableTextService\
Rundll32 TableTextService.dll UnregisterProfile TableTextServiceSimplifiedwbzx86.txt
cd %programFiles% (x86)\Windows NT\TableTextService\
Rundll32 TableTextService.dll UnregisterProfile TableTextServiceSimplifiedwbzx86.txt
Del "%programFiles%\Windows NT\TableTextService\TableTextServiceSimplifiedwbzx86.txt"
Del "%programFiles%\Windows NT\TableTextService\zh-CN\wbzx86.ico"
Del "%programFiles% (x86)\Windows NT\TableTextService\TableTextServiceSimplifiedwbzx86.txt"
Del "%programFiles% (x86)\Windows NT\TableTextService\zh-CN\wbzx86.ico"
将上述两个脚本文件连同TableTextServiceSimplifiedwbzx86.txt和zh-CN\wbzx86.ico复制到同一文件夹,运行WbzxSetupx64即可实现该输入法的安装,运行wbzxUninstallx64.cmd即可实现该输入法的卸载.
(2)制作自解压包 选中WbzxSetupx64,wbzxUninstallx64.cmd,TableTextServiceSimplifiedwbzx86.txt和zh-CN\wbzx86.ico,右击鼠标添加到WINRAR包,选中制作自解压格式压缩文件.
选中高级选项卡,设定解压路径和解压后运行文件名: wbzxReg(x64).cmd,如果是32位系统则更改为相应的32位文件wbzxReg(x86).cmd.如果没有产生相应的输入法,还可以在输入法设置中添加此输入法.
由此得到的输入法与WINDOWS7内置输入法在使用方法上没有两样.上述方法若有不当之处,敬请指正.
附:完整的码表文件头部分
[System]
LangId = LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
GuidProfile={6F89EB9B-88D5-4720-8AA6-5B23142D1E0D}
Description="自定义五笔字型86版"
Display Description="自定义五笔字型86版"
Enable=1
Icon=%programFiles%\Windows NT\TableTextService\zh-CN\wbzx86.ico
IconIndex=0
[Configuration]
ShowIncrementalCandidateImmediately=1
MakePhraseFromText=1
Wildcard=1
DisableWildcardAtFirst=1
KeystrokeSort=1
CandidateWindow.Width=12
Composition.ConversionOnlyOneItem=1
[PreservedKey]
GuidImeMode={98213494-367A-4855-90A1-97D917E3EC3D}
KeyDefineImeMode=VK_SHIFT, TF_MOD_ON_KEYUP_SHIFT_ONLY
DescriptionImeMode="@%programFiles%\Windows NT\TableTextService\TableTextService.dll,-20"
ImeMode=1
GuidDoubleSingleByte={F1101BB8-CD65-4ceb-B5BD-8ECDD574D1D0}
KeyDefineDoubleSingleByte=VK_SPACE, TF_MOD_SHIFT
DescriptionDoubleSingleByte="@%programFiles%\Windows NT\TableTextService\TableTextService.dll,-23"
DoubleSingleByte=0
GuidPunctuation={172D66D5-5EDE-4fb7-8B00-209BE826758D}
KeyDefinePunctuation=VK_OEM_PERIOD, TF_MOD_CONTROL
DescriptionPunctuation="@%programFiles%\Windows NT\TableTextService\TableTextService.dll,-26"
Punctuation=1
[LanguageBar]
GuidImeMode={8F0F77F4-3071-4fc8-9DB8-F712228D5B72}
DescriptionImeMode="Conversion mode"
TooltipImeMode="@%programFiles%\Windows NT\TableTextService\TableTextService.dll,-20"
EnableImeMode=1
ImeModeOnIconIndex=ICON_IME_MODE_ON
ImeModeOffIconIndex=ICON_IME_MODE_OFF
GuidDoubleSingleByte={23952935-FE82-40bc-A83A-F6D49F943043}
DescriptionDoubleSingleByte="Character width"
TooltipDoubleSingleByte="@%programFiles%\Windows NT\TableTextService\TableTextService.dll,-23"
EnableDoubleSingleByte=1
DoubleSingleByteOnIconIndex=ICON_DOUBLE_SINGLE_BYTE_ON
DoubleSingleByteOffIconIndex=ICON_DOUBLE_SINGLE_BYTE_OFF
GuidPunctuation={277CA405-EA1F-4e08-B772-A5B47D192B9E}
DescriptionPunctuation="Punctuation"
TooltipPunctuation="@%programFiles%\Windows NT\TableTextService\TableTextService.dll,-26"
EnablePunctuation=1
PunctuationOnIconIndex=ICON_PUNCTUATION_ON
PunctuationOffIconIndex=ICON_PUNCTUATION_OFF
[Profile]
KeystrokeFile ="%programFiles%\Windows NT\TableTextService\TableTextServiceSimplifiedwbzx86.txt"
DictionaryFile="%programFiles%\Windows NT\TableTextService\TableTextServiceSimplifiedwbzx86.txt"
[Keystroke.Candidate]
VK_OEM_PLUS, 0 = MOVE_PAGE_DOWN
VK_OEM_MINUS, 0 = MOVE_PAGE_UP
[Keystroke.Composition]
VK_A, 0 = INPUT // A
VK_B, 0 = INPUT // B
VK_C, 0 = INPUT // C
VK_D, 0 = INPUT // D
VK_E, 0 = INPUT // E
VK_F, 0 = INPUT // F
VK_G, 0 = INPUT // G
VK_H, 0 = INPUT // H
VK_I, 0 = INPUT // I
VK_J, 0 = INPUT // J
VK_K, 0 = INPUT // K
VK_L, 0 = INPUT // L
VK_M, 0 = INPUT // M
VK_N, 0 = INPUT // N
VK_O, 0 = INPUT // O
VK_P, 0 = INPUT // P
VK_Q, 0 = INPUT // Q
VK_R, 0 = INPUT // R
VK_S, 0 = INPUT // S
VK_T, 0 = INPUT // T
VK_U, 0 = INPUT // U
VK_V, 0 = INPUT // V
VK_W, 0 = INPUT // W
VK_X, 0 = INPUT // X
VK_Y, 0 = INPUT // Y
VK_Z, 0 = INPUT // Z
[Text]
bmqi="阿贝尔"
baot="阿基米德"
……
联系:
重庆沙坪坝林园:重庆通信学院数学教研室 陈代国 400035
EM:chendaiguo163@163.com PH:13883838681
本文档为【自制WINDOWS7输入法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。