1 枚举WinCE系统中可用的输入法
int SipEnumIM(
IMENUMPROC pEnumIMProc
);
参数pEnumIMProc指向一个回调函数SipEnumIMProc,在该函数中获取可用输入法的信息。如果pEnumIMProc设置为NULL,则SipEnumIM返回当前系统中可用输入法的数量。
CLSID g_SipClsid[10] = {0};
int g_index = 0, g_nIMs = 0;
g_nIMs = SipEnumIM(NULL); // 在我们的eWin产品中,返回值是2。(大小双拼)
回调函数SipEnumIMProc的原型:
int SipEnumIMProc(
IMENUMINFO* pIMInfo
);
参数pIMInfo 指向IMENUMINFO结构体,该结构体如下:
struct_IMENUMINFO{
TCHAR szName[MAX_PATH];
CLSID clsid;
}IMENUMINFO;
主要获取其中的clsid,保存下来,以后设置当前输入法要用到。
例:
CLSID g_SipClsid[20] = {0};
int g_index = 0, g_nIMs = 0;
int SipEnumIMProc(IMENUMINFO* pIMInfo)
{
if (g_index < g_nIMs)
{
g_SipClsid[g_index] = pIMInfo->clsid;
g_index++;
return g_index;
}
g_index = 0;
return 0;
}
g_nIMs = SipEnumIM(NULL);
IMENUMPROC pEnumIMProc = SipEnumIMProc;
SipEnumIM(pEnumIMProc);
这段代码在我公司WinCE产品中获取到两个可用输入法的CLSID:
{f50603d1-cf2f-41d8-a74b-651226633ff0}
{28BD0FFF-23E2-4976-A685-C419CB8011DC}
上面的是小键盘双拼输入法的CLSID,下面的是大键盘的CLSID。
2 设置当前输入法
BOOL SipSetCurrentIM(
CLSID* pClsid
);
这一个函数就可以完成设置当前输入法的功能,唯一的参数就是可用的输入法CLSID。
例:
::SipSetCurrentIM(&g_SipClsid[0]); // 设置为小键盘双拼输入法
::SipSetCurrentIM(&g_SipClsid[1]); // 设置为大键盘双拼输入法
3 设置WinCE系统的开机默认输入法
[HKEY_CURRENT_USER/ControlPanel/Sip]
在我的WinCE系统下,在如上注册表位置,DefaultIm的Data设置为{f50603d1-cf2f-41d8-a74b-651226633ff0},则开机默认的输入法为小键盘。将其值修改为{28BD0FFF-23E2-4976-A685-C419CB8011DC}则开机默认的输入法为大键盘,当然前提是注册表可掉电保存。
4 显示/隐藏当前输入法面板
SipShowIM(SIPF_ON); // 显示
SipShowIM(SIPF_OFF); // 隐藏