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 解决窗口切换输入法变全角的问题 
原文地址:https://www.cnblogs.com/linmilove/p/1718789.html