ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:355.61KB ,
资源ID:7852975      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7852975.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(常用API数参数5.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

常用API数参数5.docx

1、常用API数参数5常用API函数参数5ImmIsIME函数功能: 判断指定的句柄是否为IME; 函数原型: BOOL ImmIsIME( HKL hKL ); 参数hKL: 待检查的键盘布局句柄; 返回值: 函数调用成功返回1,失败返回0. 速查信息: Windows NT: 要求4.0或更高版本 Windows: 要求Windows 95 或更高. Windows CE: 不支持. Header: 声明在imm.h. Import Library: imm32.lib.Windows XP没有自带五笔型输入法,这对五笔型用户而言无疑是个大大的遗憾。网上的五笔型输入法虽然种类很多,也不乏优秀的

2、版本,但一方面有些版本是共享软件需要注册,另一方面也许很多五笔型输入法的老用户最习惯用的还是老牌的“王码五笔型输入法86/98版”。微软的Office XP软件中包含了这个老牌的五笔型输入法,但如果用户并不使用Office XP中的任何组件,仅仅是为了使用“王码五笔型输入法”而运行Office XP安装程序,就显的有些小题大做了,更不用说是某些零时在外面用公用电脑而又想用五笔型输入法的情况。于是网上出现了很多简化的安装方法,大体上可以分为三个步骤:拷贝输入法文件(从Of还是9x/ME。示例代码fice XP光盘中或已经安装了“王码五笔型输入法”的电脑中提取)增加注册表项重启后通过控制面板添加输

3、入法整个过程中拷贝输入法文件和增加注册表项可以用批处理和导入注册表文件来简化操作,但必须重启计算机才能在控制面板里添加输入法,这同样让使用者觉得比较烦琐。那么作为一个编程爱好者能不能通过写个小程序来实现在不重新启动计算机的情况下全自动的安装“王码五笔型输入法”呢(也就是即装即用)?答案是肯定的!因为微软的Office XP安装程序做到了,这就表示微软肯定留有一个专门用来安装输入法的接口,一般来说应该是一系列API函数。经过一番摸索,笔者在MSDN里找到了这个可以用来安装输入法的API:ImmInstallIME()。Ok,现在我们就开始利用这个API来实现自己的“王码五笔型输入法”全自动安装程

4、序。一、准备素材 我们先试着从Office XP光盘中提取“王码五笔型输入法”的输入法文件。通过Windows的查找功能在Office XP的第一张安装盘中查找与“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.IM

5、E.*、WINWB98W.MB.*,其中*是很长的一串由字母、数字和下滑线组成的序列(个人认为应该是微软为了校验文件内容的正确性而加上的内容为该文件效验码的后缀吧)。去掉这个长长的后缀,可以看到5种类型的文件。很明显,*.CHM、*.CNT和*.HLP是五笔型输入法的帮助文件,*.MB是码表文件,而*.IME是主要的输入法文件。其中*.IME和*.MB有文件名部分以A结尾和以W结尾两个版本,经过笔者试验证实了它们分别是ANSI和UNICODE两种版本的输入法文件。文件名部分以A结尾的文件适用于Windows 9x,以W结尾的文件适用于NT系列Windows系统。提取了输入法文件后必须让安装程序

6、针对不同版本的操作系统将它们拷贝到正确的目录,以便调用API来进行输入法安装。笔者分别在安装了Office XP中自带的“王码五笔型输入法”的Windows 98SE和Windows XP操作系统中查找以上文件,发现帮助文件都存放在WINDOWSHELP目录中(这里假设Windows系统都安装在WINDOWS目录)。而主要的输入法文件(*.IME)和码表文件(*.MB)在Windows 9x下存放于WINDOWSSYSTEM目录中,在NT系列Windows系统中存放于WINDOWSSYSTEM32目录中。二、相关API函数素材的准备工作已经完成,现在我们来看一下代码编写过程中需要用到的4个主要

7、的API函数。2.1 GetVersion函数原型:DWORD GetVersion(VOID);该函数返回与当前使用的Windows系统版本有关的信息。可以通过判断返回值最高位是否为1来判断当前是用的系统是NT/2000/XP还是9x/ME。示例代码:if (GetVersion() 0x80000000)/NT/2000/XPelse/9x/ME2.2 CopyFile函数原型:BOOL CopyFile(LPCTSTR lpExistFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);该函数将以lpExistFileName指向的字符

8、串为文件名的文件复制为以lpNewFileName指向的字符串为文件名的新文件。这里的文件名可以包含文件路径。最后的参数bFailIfExists决定当新文件已存在时是否覆盖现有文件,如果为FALSE,则覆盖。示例代码:CopyFile(c:a.txt, d:.txt, FALSE);以上代码将c盘下的a.txt文件复制到D盘下并命名为b.txt。如果已经存在b.txt,则覆盖原来的文件。2.3 ImmInstallIME函数原型:HKL ImmInstallIME(LPCTSTR lpszIMEFileName, LPCTSTR lpszLayoutText);这是制作“王码五笔型输入法”全

9、自动安装程序的关键函数。函数的两个参数分别为输入法IME文件的文件名和在控制面板的是输入法选项中显示的输入法名称。函数调用后将返回一个被安装输入法的输入法标识符(或称做输入法句柄)。示例代码:HKL hKL = ImmInstallIME(c:winwb86.ime, 王码五笔型输入法86版);以上代码将输入法文件c:winwb86.ime安装到系统中,并命名为“王码五笔型输入法86版”。函数调用后返回安装的输入法的标识符,存放在hKL变量中。2.4 ImmIsIME函数原型:BOOL ImmIsIME(HKL hKL);该函数判断hKL指向的输入法是否有效。我们可以用ImmInstallIM

10、E函数的返回值作为该函数参数,通过函数返回值来判断输入法是否安装成功。示例代码:if (ImmIsIME(hKL)/安装输入法成功else/安装失败hKL为调用ImmInstallIME()后得到的输入法标识符。三、创建工程并添加代码 1. 打开Visual C+ 6.0,通过菜单File - New新建一个名为“WINWB”的“Win32 Application”工程(如图1),单击“OK”。2. 在应用程序类型选择中选择“An empty project”(图2),单击“Finsish”。这样我们就新建好了一个空的Win32应用程序工程。3. 通过菜单Project - Add to Pr

11、oject - New添加一个“Resource Script”资源文件,命名为“WINWB”(如图3)。4. 通过菜单Insert - Resource添加一个新的Dialog资源(如图4)。5. 调整Dialog资源的若干属性。在Dialog的任意空白区域双击鼠标左键打开属性对话框,在属性对话框的Gerneral选项卡中更改ID为“IDD_MAIN”、 Caption属性为“王码五笔型输入法安装程序”(如图5)。单击Font按钮,更改字体为宋体9号(这是简体中文版XP的标准字体型号)。单击More Styles选项卡,选中Center属性,使对话框能在屏幕中居中显示(如图6)。6. 关闭属

12、性对话框,回到资源编辑界面。删掉系统自动添加的“Cancel”按钮并更改“OK”按钮的Caption属性为“安装”(如图7)。7. 添加一个新的Static Text控件,打开属性对话框更改Caption属性为“请选择输入法版本:”(如图8)。8.添加一个新的List Box控件,打开属性对话框更改ID为“IDC_LIST”(如图9):并更改它的Selection属性为“Multiple”(如图10)。9. 适当调整控件的大小和位置,完成资源创建(如图11):10. 通过菜单Project - Add to Project - New添加一个“C+ Source File”代码文件,命名为“W

13、INWB”(如图12):11. 在新添加“WINWB.CPP”文件中输入程序代码,代码如下:#include #include resource.h#pragma comment(lib, imm32.lib)#define IME_WINWB860#define IME_WINWB981BOOLCALLBACKMain_DlgProc(HWND, UINT, WPARAM, LPARAM);LPCTSTRTranslateFileName(LPCTSTR);voidInstallIME(int);int WINAPI WinMain(HINSTANCEhInstance, HINSTANCE

14、hPrevInstance, LPSTRlpCmdLine, intnShowCmd) 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,

15、 WPARAM wParam, LPARAM lParam) TCHARstrWINWB86 = 王码五笔型输入法86版; TCHARstrWINWB98 = 王码五笔型输入法98版; TCHARcBuf30;/ 存放LISTBOX中ITEM文本的缓冲区 intnBuf2;/ 存放LISTBOX中被选中的ITEM索引号的缓冲区 intnSel;/ LISTBOX中被选种的ITEM的数目 switch (uMsg) case WM_INITDIALOG: / 初始化LISTBOX SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARA

16、M)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_GETSE

17、LITEMS, 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, nBufnSel, (LPARAM)cBuf); if (lstrcmp(cBuf, strWINWB86) = 0) InstallIME(IME_WINWB86);/ 安装王码五笔型输入法86版

18、else if (lstrcmp(cBuf, strWINWB98) = 0) InstallIME(IME_WINWB98);/ 安装王码五笔型输入法98版 return TRUE; default: return FALSE; TCHAR g_strFileNameMAX_PATH;/ 函数TranslateFileName用到的字符串缓冲区/ 函数名:TranslateFileName/ 参数:lpszFileName - 指向用相对路径表示的文件名的字符串指针/ 返回值:指向用绝对路径表示的文件名的字符串指针/ 备注:将以WINDOWS目录为基准的用相对路径表示的文件名转换成用绝对路径

19、表示的文件名/LPCTSTR TranslateFileName(LPCTSTR lpszFileName) / 获取WINDOWS目录的路径 GetWindowsDirectory(g_strFileName, MAX_PATH); / 如果WINDOWS目录的路径是根目录 if (g_strFileNamelstrlen(g_strFileName)-1 = ) / 去掉路径最后的“” g_strFileNamelstrlen(g_strFileName)-1 = ; / 连接WINDOWS目录路径和用相对路径表示的文件名 lstrcat(g_strFileName, lpszFileNa

20、me); return g_strFileName;/ 函数名:InstallIME/ 参数:nIMEType - 输入法类型/ 返回值: 无/ 备注:安装指定的输入法/void InstallIME(int nIMEType) TCHARstrWINWB86A = 王码五笔型86版; TCHARstrWINWB86W = 中文 (简体) - 王码五笔型86版; TCHARstrWINWB98A = 王码五笔型98版; TCHARstrWINWB98W = 中文 (简体) - 王码五笔型98版; HKLhKL; if (nIMEType = IME_WINWB86) / 复制输入法帮助文件 C

21、opyFile(WINWB86.HLP, TranslateFileName(HELPWINWB86.HLP), FALSE); CopyFile(WINWB86.CHM, TranslateFileName(HELPWINWB86.CHM), FALSE); CopyFile(WINWB86.CNT, TranslateFileName(HELPWINWB86.CNT), FALSE); if (GetVersion() 0x80000000)/ NT/2000/XP系统 / 复制UNICODE版输入法文件 CopyFile(WINWB86W.IME, TranslateFileName(S

22、YSTEM32WINWB86.IME), FALSE); CopyFile(WINWB86W.MB, TranslateFileName(SYSTEM32WINWB86.MB), FALSE); / 安装UNICODE版输入法 hKL = ImmInstallIME(TranslateFileName(SYSTEM32WINWB86.IME), strWINWB86W); else/ 9X/ME系统 / 复制ANSI版输入法文件 CopyFile(WINWB86A.IME, TranslateFileName(SYSTEMWINWB86.IME), FALSE); CopyFile(WINWB

23、86A.MB, TranslateFileName(SYSTEMWINWB86.MB), FALSE); / 安装ANSI版输入法 hKL = ImmInstallIME(TranslateFileName(SYSTEMWINWB86.IME), strWINWB86A); / 验证输入法句柄是否有效 if (ImmIsIME(hKL) MessageBox(NULL, 安装王码五笔型输入法86版成功!, 提示信息, MB_OK); else MessageBox(NULL, 安装王码五笔型输入法86版失败!, 提示信息, MB_OK); else if (nIMEType = IME_WIN

24、WB98) CopyFile(WINWB98.HLP, TranslateFileName(HELPWINWB98.HLP), FALSE); CopyFile(WINWB98.CHM, TranslateFileName(HELPWINWB98.CHM), FALSE); CopyFile(WINWB98.CNT, TranslateFileName(HELPWINWB98.CNT), FALSE); if (GetVersion() 0x80000000) CopyFile(WINWB98W.IME, TranslateFileName(SYSTEM32WINWB98.IME), FALS

25、E); CopyFile(WINWB98W.MB, TranslateFileName(SYSTEM32WINWB98.MB), FALSE); hKL = ImmInstallIME(TranslateFileName(SYSTEM32WINWB98.IME), strWINWB98W); else CopyFile(WINWB98A.IME, TranslateFileName(SYSTEMWINWB98.IME), FALSE); CopyFile(WINWB98A.MB, TranslateFileName(SYSTEMWINWB98.MB), FALSE); hKL = ImmIns

26、tallIME(TranslateFileName(SYSTEMWINWB98.IME), strWINWB98A); if (ImmIsIME(hKL) MessageBox(NULL, 安装王码五笔型输入法98版成功!, 提示信息, MB_OK); else MessageBox(NULL, 安装王码五笔型输入法98版失败!, 提示信息, MB_OK); 四、制作安装包在菜单Build - Set Active Configuration设置工程配置为“Win32 Release”,然后进行编译、连接。将编译、连接后生成的可执行文件Releasewinwb.exe与前面提取出来的14个王码

27、五笔型输入法文件放在同一目录中,我们的王码五笔型输入法全自动安装程序就完成了。但作为一个小功能程序,需要携带15个文件,未免有些不太方便。同时也为了使我们的程序看上去更专业点,我们可以使用一些压缩软件或者安装包制作工具来将它制作成一个单一文件的软件安装包,这样也可以方便携带和使用。这里笔者推荐使用Windows 2000/XP自带的一个安装包制作工具IExpress,它采用微软的CAB压缩文件格式,能生成自解压缩文件,是一款小巧、免费的安装包制作工具。具体制作步骤如下:1. 在开始菜单的运行中键入“iexpress”,单击确定打开IExpress程序(如图13)。2. 保持默认选项“Creat

28、e 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”界面,单击

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1