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);
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"才能通过编译!
以上很好用!!!!!!比在注册表里切换容易多了。。。
如果对你有帮助一定要顶!!!!!!