C#切换输入法代码段

string  languageName = " 五笔 " ; // 查找第一个五笔输入法 
foreach (InputLanguage l  in  InputLanguage.InstalledInputLanguages) 

if (l.LayoutName.IndexOf(languageName) >= 0

InputLanguage.CurrentInputLanguage
= l; 
break

}

 

 

using  System.Runtime.InteropServices;

#region  解决窗口切换输入法变全角的问题

        
// 声明一些API函数
        [DllImport( " imm32.dll " )]
        
internal   static   extern  IntPtr ImmGetContext(IntPtr hwnd);
        [DllImport(
" imm32.dll " )]
        
internal   static   extern   bool  ImmGetOpenStatus(IntPtr himc);
        [DllImport(
" imm32.dll " )]
        
internal   static   extern   bool  ImmSetOpenStatus(IntPtr himc,  bool  b);
        [DllImport(
" imm32.dll " )]
        
internal   static   extern   bool  ImmGetConversionStatus(IntPtr himc,  ref   int  lpdw,  ref   int  lpdw2);
        [DllImport(
" imm32.dll " )]
        
internal   static   extern   int  ImmSimulateHotKey(IntPtr hwnd,  int  lngHotkey);
        
private   const   int  IME_CMODE_FULLSHAPE  =   0x8 ;
        
private   const   int  IME_CHOTKEY_SHAPE_TOGGLE  =   0x11 ;
        
// 重载Form的OnActivated

        
protected   override   void  OnActivated(EventArgs e)
        {
            
base .OnActivated(e);
            IntPtr HIme 
=  ImmGetContext( this .Handle);
            
if  (ImmGetOpenStatus(HIme))   // 如果输入法处于打开状态
            {
                
int  iMode  =   0 ;
                
int  iSentence  =   0 ;
                
bool  bSuccess  =  ImmGetConversionStatus(HIme,  ref  iMode,  ref  iSentence);   // 检索输入法信息
                 if  (bSuccess)
                {
                    
if  ((iMode  &  IME_CMODE_FULLSHAPE)  >   0 )    // 如果是全角
                        ImmSimulateHotKey( this .Handle, IME_CHOTKEY_SHAPE_TOGGLE);   // 转换成半角
                }
            }
        }
#endregion  解决窗口切换输入法变全角的问题 

 

 

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