
常用软件类: |
|杀毒安全 | |联络聊天 | |网络软件 | |多媒体类 | |系统工具 | |图形图像 | |系统工具 | |应用软件 | |行业软件 |
开发设计类: |
|动画制作 | |图像处理 | |3D设计 | |操作系统 | |站长学院 | |网络相关 | |WEB设计 | |数据库类 | |程序开发 |
10. 通过菜单Project - Add to Project - New添加一个“C++ Source File”代码文件,命名为“WINWB”(如图12):

11. 在新添加“WINWB.CPP”文件中输入程序代码,代码如下:
#include <windows.h>
#include "resource.h"
#pragma comment(lib, "imm32.lib")
#define IME_WINWB86 0
#define IME_WINWB98 1
BOOL CALLBACK Main_DlgProc(HWND, UINT, WPARAM, LPARAM);
LPCTSTR TranslateFileName(LPCTSTR);
void InstallIME(int);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
DialogBox(hInstance, (LPCTSTR)IDD_MAIN, NULL, Main_DlgProc);
return 0;
}
//
// 函数名:Main_DlgProc
//
// 参 数:hDlg - 对话框句柄
// uMsg - 消息值
// wParam、lParam - 消息参数
//
// 返回值:TRUE - 消息已处理
// FALSE - 消息未处理,返回给默认对话框处理程序处理
//
// 备 注:对话框IDD_MAIN的回调函数
//
BOOL CALLBACK Main_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
TCHAR strWINWB86[] = "王码五笔型输入法86版";
TCHAR strWINWB98[] = "王码五笔型输入法98版";
TCHAR cBuf[30]; // 存放LISTBOX中ITEM文本的缓冲区
int nBuf[2]; // 存放LISTBOX中被选中的ITEM索引号的缓冲区
int nSel; // LISTBOX中被选种的ITEM的数目
switch (uMsg)
{
case WM_INITDIALOG:
// 初始化LISTBOX
SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)strWINWB86);
SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)strWINWB98);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
// 响应“退出”按钮
case IDCANCEL:
EndDialog(hDlg, 0);
return TRUE;
// 响应“添加”按钮
case IDOK:
// 获取LISTBOX中被选中的ITEM的数目及索引号
nSel = SendDlgItemMessage(hDlg, IDC_LIST, LB_GETSELITEMS, 2, (LPARAM)nBuf);
if (nSel == 0)
{
MessageBox(hDlg, "请选择输入法版本!", "提示信息", MB_OK);
return TRUE;
}
for (-- nSel; nSel >= 0; nSel --)
{
// 获取LISTBOX中该索引号对应的ITEM的文本
SendDlgItemMessage(hDlg, IDC_LIST, LB_GETTEXT, nBuf[nSel], (LPARAM)cBuf);
if (lstrcmp(cBuf, strWINWB86) == 0)
{
InstallIME(IME_WINWB86); // 安装王码五笔型输入法86版
}
else if (lstrcmp(cBuf, strWINWB98) == 0)
{
InstallIME(IME_WINWB98); // 安装王码五笔型输入法98版
}
}
return TRUE;
}
default:
return FALSE;
}
}
TCHAR g_strFileName[MAX_PATH]; // 函数TranslateFileName用到的字符串缓冲区
//
// 函数名:TranslateFileName
//
// 参 数:lpszFileName - 指向用相对路径表示的文件名的字符串指针
//
// 返回值:指向用绝对路径表示的文件名的字符串指针
//
// 备 注:将以WINDOWS目录为基准的用相对路径表示的文件名转换成用绝对路径表示的文件名
//
LPCTSTR TranslateFileName(LPCTSTR lpszFileName)
{
// 获取WINDOWS目录的路径
GetWindowsDirectory(g_strFileName, MAX_PATH);
// 如果WINDOWS目录的路径是根目录
if (g_strFileName[lstrlen(g_strFileName)-1] == '\\')
{
// 去掉路径最后的“\”
g_strFileName[lstrlen(g_strFileName)-1] = '\0';
}
// 连接WINDOWS目录路径和用相对路径表示的文件名
lstrcat(g_strFileName, lpszFileName);
return g_strFileName;
}
//
// 函数名:InstallIME
//
// 参 数:nIMEType - 输入法类型
//
// 返回值: 无
//
// 备 注:安装指定的输入法
//
void InstallIME(int nIMEType)
{
TCHAR strWINWB86A[] = "王码五笔型86版";
TCHAR strWINWB86W[] = "中文 (简体) - 王码五笔型86版";
TCHAR strWINWB98A[] = "王码五笔型98版";
TCHAR strWINWB98W[] = "中文 (简体) - 王码五笔型98版";
HKL hKL;
if (nIMEType == IME_WINWB86)
{
// 复制输入法帮助文件
CopyFile("WINWB86.HLP", TranslateFileName("\\HELP\\WINWB86.HLP"), FALSE);
CopyFile("WINWB86.CHM", TranslateFileName("\\HELP\\WINWB86.CHM"), FALSE);
CopyFile("WINWB86.CNT", TranslateFileName("\\HELP\\WINWB86.CNT"), FALSE);
if (GetVersion() < 0x80000000) // NT/2000/XP系统
{
// 复制UNICODE版输入法文件
CopyFile("WINWB86W.IME", TranslateFileName("\\SYSTEM32\\WINWB86.IME"), FALSE);
CopyFile("WINWB86W.MB", TranslateFileName("\\SYSTEM32\\WINWB86.MB"), FALSE);
// 安装UNICODE版输入法
hKL = ImmInstallIME(TranslateFileName("\\SYSTEM32\\WINWB86.IME"), strWINWB86W);
}
else // 9X/ME系统
{
// 复制ANSI版输入法文件
CopyFile("WINWB86A.IME", TranslateFileName("\\SYSTEM\\WINWB86.IME"), FALSE);
CopyFile("WINWB86A.MB", TranslateFileName("\\SYSTEM\\WINWB86.MB"), FALSE);
// 安装ANSI版输入法
hKL = ImmInstallIME(TranslateFileName("\\SYSTEM\\WINWB86.IME"), strWINWB86A);
}
// 验证输入法句柄是否有效
if (ImmIsIME(hKL))
{
MessageBox(NULL, "安装王码五笔型输入法86版成功!", "提示信息", MB_OK);
}
else
{
MessageBox(NULL, "安装王码五笔型输入法86版失败!", "提示信息", MB_OK);
}
}
else if (nIMEType == IME_WINWB98)
{
CopyFile("WINWB98.HLP", TranslateFileName("\\HELP\\WINWB98.HLP"), FALSE);
CopyFile("WINWB98.CHM", TranslateFileName("\\HELP\\WINWB98.CHM"), FALSE);
CopyFile("WINWB98.CNT", TranslateFileName("\\HELP\\WINWB98.CNT"), FALSE);
if (GetVersion() < 0x80000000)
{
CopyFile("WINWB98W.IME", TranslateFileName("\\SYSTEM32\\WINWB98.IME"), FALSE);
CopyFile("WINWB98W.MB", TranslateFileName("\\SYSTEM32\\WINWB98.MB"), FALSE);
hKL = ImmInstallIME(TranslateFileName("\\SYSTEM32\\WINWB98.IME"), strWINWB98W);
}
else
{
CopyFile("WINWB98A.IME", TranslateFileName("\\SYSTEM\\WINWB98.IME"), FALSE);
CopyFile("WINWB98A.MB", TranslateFileName("\\SYSTEM\\WINWB98.MB"), FALSE);
hKL = ImmInstallIME(TranslateFileName("\\SYSTEM\\WINWB98.IME"), strWINWB98A);
}
if (ImmIsIME(hKL))
{
MessageBox(NULL, "安装王码五笔型输入法98版成功!", "提示信息", MB_OK);
}
else
{
MessageBox(NULL, "安装王码五笔型输入法98版失败!", "提示信息", MB_OK);
}
}
}
在菜单Build - Set Active Configuration设置工程配置为“Win32 – Release”,然后进行编译、连接。将编译、连接后生成的可执行文件\Release\winwb.exe与前面提取出来的14个王码五笔型输入法文件放在同一目录中,我们的王码五笔型输入法全自动安装程序就完成了。但作为一个小功能程序,需要携带15个文件,未免有些不太方便。同时也为了使我们的程序看上去更专业点,我们可以使用一些压缩软件或者安装包制作工具来将它制作成一个单一文件的软件安装包,这样也可以方便携带和使用。
这里笔者推荐使用Windows 2000/XP自带的一个安装包制作工具——IExpress,它采用微软的CAB压缩文件格式,能生成自解压缩文件,是一款小巧、免费的安装包制作工具。
具体制作步骤如下:
1. 在开始菜单的运行中键入“iexpress”,单击确定打开IExpress程序(如图13)。
2. 保持默认选项“Create new Self Extraction Directive file”,单击下一步继续。
3. 保持默认选项“Extract files and run an installation command”,单击下一步继续。
4. 进入“Package title”界面,在编辑框中输入“解压缩文件”(如图14),这是将生成的安装包解压缩时出现的对话框的标题栏,可以随意设定。输入完成后单击下一步继续。
5. 保持默认选项“No prompt”,单击下一步继续。
6. 保持默认选项“Do not display a license”,单击下一步继续。
7. 进入“Packaged files”界面,单击“Add”按钮,在打开文件对话框中选中王码五笔型输入法安装程序的所有15个文件(如图15和图16),单击下一步继续。
8. 进入“Install Program to”,在“Install Program”下拉式组合框中选中“WINWB.exe”(如图17),单击下一步继续。
9. 保持默认选项“Default(recommended)”,单击下一步继续。
10. 保持默认选项“No message”,单击下一步继续。
11. 进入“Package Name and Options”界面,单击“Browse”按钮选择安装包存放位置和文件名。这里笔者仍然使用“WINWB.EXE”(如图18和图19)。注意使用这个文件名时不要将安装包放在安装程序所在目录,以免和我们制作的安装程序WINWB.exe重名。单击下一步继续。
12. 进入“Configure restart”界面,选中“No restart”,单击下一步继续。
13. 进入“Save Self Extraction Directive”界面,选中“Don't save”,单击下一步继续。
14. 进入“Create package”界面,单击下一步完成设置工作并开始制作安装包。
15. 单击完成结束安装包制作。
OK,我们的王码五笔型输入法安装包才算真正制作完成了! :)
本程序在Windows XP Profession(SP1)简体中文版、Visual Studio 6.0(SP6)英文企业版下调试通过。在Windows 98SE简体中文版下运行通过。
源程序可以在这里下载附件(zip压缩文件, 17K)。
可以直接安装的王码五笔可以在这里下载附件(EXE安装文件, 1.07M)。