用VC 自制王码五笔字型输入法安装包

2008-02-23 05:33:39来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

Windows XP没有自带五笔字型输入法,虽然网上相关输入法很多,但一方面有些版本是共享软件,另一方面也许很多五笔字型输入法的老用户最习惯用的还是老牌的“王码五笔字型输入法86/98版”。

  微软Office XP中包含了王码五笔,但假如仅仅是为了使用他而运行Office XP安装程式,就显得有些小题大做了,更不用说是某些临时在外面用公用电脑而又想用五笔字型输入法的情况。于是网上出现了很多简化安装方法,大体可分为三个步骤:

  1.拷贝输入法文档(从Office XP光盘中或已安装了“王码五笔字型输入法”的电脑中提取)
 
  2.增加注册表项

  3.重启后通过控制面板添加输入法

  整个过程中拷贝输入法文档和增加注册表项能够用批处理和导入注册表文档来简化操作,但必须重启电脑才能在控制面板里添加输入法,这同样让使用者觉得比较烦琐。作为编程爱好者能不能通过写个小程式实现在不重启全自动安装“王码五笔字型输入法”呢(也就是即装即用)?答案是肯定的!因为Office XP安装程式做到了,这就表示微软肯定留有一个专门用来安装输入法的接口,一般来说应该是一系列API函数。

  经过一番摸索,笔者在MSDN里找到了这个能够用来安装输入法的API:ImmInstallIME()。OK,现在就开始利用他实现自己的“王码五笔字型输入法”全自动安装程式。

  一、准备素材

  先试着从Office XP光盘中提取“王码五笔字型输入法”的输入法文档。通过Windows查找功能第一张安装盘中查找和“WINWB”相关的文档,在OFFICE1.CAB中找到以下14个文档:WINWB86.CHM.*、WINWB86.CNT.*、WINWB86.HLP.*、WINWB86A.IME.*、WINWB86A.MB.*、WINWB86W.IME.*、WINWB86W.MB.*、WINWB98.CHM.*、WINWB98.CNT.*、WINWB98.HLP.*、WINWB98A.IME.*、WINWB98A.MB.*、WINWB98W.IME.*、WINWB98W.MB.*,其中*是很长的一串由字母、数字和下滑线组成的序列(个人认为应该是微软为校验文档内容正确性而加上的为该文档校验码的后缀)。去掉这个长长的后缀,能够看到5种类型的文档。很明显,*.CHM、*.CNT和*.HLP是输入法帮助文档,*.MB是码表文档,*.IME是输入法主文档。其中*.IME和*.MB有文档名部分以A结尾和以W结尾两个版本,经过试验证实了他们分别是ANSI和UNICODE两种版本的输入法文档。文档名部分以A结尾的文档适用于Windows 9x,以W结尾的文档适用于NT系列Windows。

  提取了输入法文档后必须让安装程式针对不同版本操作系统将他们拷贝到正确的目录,以便调用API来进行输入法安装。笔者分别在安装了Office XP中自带的“王码五笔字型输入法”的Windows 98SE和Windows XP中查找以上文档,发现帮助文档都存放在\Windows\HELP目录中(这里假设系统安装在Windows目录)。而主要的输入法文档(*.IME)和码表文档(*.MB)在Windows 9x下存放于\Windows\SYSTEM目录中,在NT系列Windows系统中存放于\Windows\SYSTEM32目录中。

  二、相关API函数

  素材准备工作已完成,现在来看一下代码编写过程中需要用到的4个主要的API函数。

  1.DWORD GetVersion(VOID)

  该函数返回和当前使用的Windows系统版本有关的信息。可通过判断返回值最高位是否为1来判断当前是用的系统是NT/2000/XP还是9x/ME。

  2.BOOL CopyFile(LPCTSTR lpExistFileName, LPCTSTR lp Name, BOOL bFailIfExists);

  该函数将以lpExistFileName指向的字符串为文档名的文档复制为以lpName指向的字符串为文档名的新文档。这里的文档名能够包含文档路径。最后的参数bFailIfExists决定当新文档已存在时是否覆盖现有文档,假如为FALSE,则覆盖。

  3.HKL ImmInstallIME(LPCTSTR lpszIMEFileName, LPCTSTR lpszLayoutText);

  这是制作“王码五笔字型输入法”全自动安装程式的关键函数。函数两个参数分别为输入法IME文档的文档名和在控制面板的是输入法选项中显示的输入法名称。函数调用后将返回一个被安装输入法的输入法标识符(或称做输入法句柄)。

  4.BOOL ImmIsIME(HKL hKL);

  该函数判断hKL指向的输入法是否有效。能够用ImmInstallIME函数的返回值作为该函数参数,通过函数返回值来判断输入法是否安装成功。

  三、创建工程并添加代码

  1.打开Visual C 6.0,通过菜单“File→New”新建名为“WINWB”的“Win32 Application”工程,单击“OK”。

  2.在应用程式类型选择中选择“An empty project”,单击“Finsish”。这样我们就新建好了一个空的Win32应用程式工程。

  3.通过菜单“Project→Add to Project→New”添加一个“Resource Script”资源文档,命名为“WINWB”。

  4.通过菜单“Insert→Resource”添加一个新的Dialog资源。

  5.调整Dialog资源的若干属性。在Dialog的任意空白区域双击鼠标左键打开属性对话框,在属性对话框的Gerneral选项卡中更改ID为“IDD_MAIN”、 Caption属性为“王码五笔字型输入法安装程式”。单击Font按钮,更改字体为宋体9号(这是简体中文版XP的标准字体型号)。单击More Styles选项卡,选中Center属性,使对话框能在屏幕中居中显示。

  6.关闭属性对话框,回到资源编辑界面。删掉系统自动添加的“Cancel”按钮并更改“OK”按钮的Caption属性为“安装”。

  7.添加一个新的Static Text控件,打开属性对话框更改Caption属性为“请选择输入法版本:”。

  8.添加一个新的List Box控件,打开属性对话框更改ID为“IDC_LIST”,并更改他的Selection属性为“Multiple”。

  9.适当调整控件的大小和位置,完成资源创建(见图1)。


  10.通过菜单“Project→Add to Project→New”添加一个“C Source File”代码文档,命名为“WINWB”。

  11.在新添加“WINWB.CPP”文档中输入程式代码,代码如下:

#include <Windows.h>
#include "resource.h"

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: VC 中进程间相互通信的十一种方法

下一篇: C /CLI中实现singleton模式