CE中的输入法跟XP下的一样。。最近搞了好久才总算知道咋回事!
操作输入法,就是操作 CLSID。只要知道想要的的输入法的 CLSID值就可以自由切到相应的输入法。。
如:
BYTE tem[16]={0x99,0xaf,0xaf,0x5a,0x99,0x8d,0x66,0x44,0xa6,0x6d,0x95,0xc4,0x4b,0x60,0x8a,0x84};//手写输入法代码
CLSID cls;
memcpy(&cls,tem,16);
SipSetCurrentIM(&cls);
CLSID cls;
memcpy(&cls,tem,16);
SipSetCurrentIM(&cls);
怎么得到这个值呢?方法很多。下面是最野蛮的办法:
1 手动切换输入法
2 CLSID cls;
::SipGetCurrentIM(&cls);
3 打印cls的值!
另可以枚举所有输入法到CLSID结构体数组中中
CLSID g_SIpClsid[20];
int g_Index=0;
int g_Index=0;
int SipEnumIMProc(IMENUMINFO* pIMInfo)
{
if((g_Index<20)&&(g_Index>=0))
{
g_SIpClsid[g_Index]=pIMInfo->clsid;
g_Index++;
}
return g_Index;
}
{
if((g_Index<20)&&(g_Index>=0))
{
g_SIpClsid[g_Index]=pIMInfo->clsid;
g_Index++;
}
return g_Index;
}
如果要切换,
代码
void SwitchSIP()
{
CLSID cls;
::SipGetCurrentIM(&cls);
for(int i=0;i<g_Index;i++)
{
if(g_SIpClsid[i]==cls)
{
if(i<g_Index-1)
{
::SipSetCurrentIM(&g_SIpClsid[i+1]);
}
else
{
::SipSetCurrentIM(&g_SIpClsid[0]);
}
}
}
}
{
CLSID cls;
::SipGetCurrentIM(&cls);
for(int i=0;i<g_Index;i++)
{
if(g_SIpClsid[i]==cls)
{
if(i<g_Index-1)
{
::SipSetCurrentIM(&g_SIpClsid[i+1]);
}
else
{
::SipSetCurrentIM(&g_SIpClsid[0]);
}
}
}
}
然后。。。就不用我多说了!!!
自己处理相应的代码。SipShowIM(SIPF_ON);SipShowIM(SIPF_OFF);在相应地方显示与关闭输入面板!
在EVC中要加入#include "sipapi.h"才能通过编译!
以上很好用!!!!!!比在注册表里切换容易多了。。。
如果对你有帮助一定要顶!!!!!!
例子:SipKey