在应用程序中自由设置wince输入法

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);

 

 

怎么得到这个值呢?方法很多。下面是最野蛮的办法:

1 手动切换输入法

2  CLSID cls;
 ::SipGetCurrentIM(&cls);

3 打印cls的值!

另可以枚举所有输入法到CLSID结构体数组中中

 

CLSID g_SIpClsid[20];
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;
}

 

如果要切换,

 

代码
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 ]);
            }
        }
    }
}

 

 

然后。。。就不用我多说了!!!

自己处理相应的代码。SipShowIM(SIPF_ON);SipShowIM(SIPF_OFF);在相应地方显示与关闭输入面板!

在EVC中要加入#include "sipapi.h"才能通过编译!

以上很好用!!!!!!比在注册表里切换容易多了。。。

如果对你有帮助一定要顶!!!!!!

你可能感兴趣的:(XP,输入法,WinCE)