切换windows系统输入法的中英文,可以忽视是哪种打字法

调用windows的API

//用户获取当前输入法句柄
[DllImport("imm32.dll")]
        public static extern IntPtr ImmGetContext(IntPtr hWnd);

//用于获取当前输入法的状态
        [DllImport("imm32.dll")]
        public static extern bool ImmGetConversionStatus(IntPtr hIMC,
            ref int conversion, ref int sentence);

//用于设置输入法的状态
        [DllImport("imm32.dll")]
        public static extern bool ImmSetConversionStatus(IntPtr hIMC, int conversion, int sentence);

有了这三个方法之后,设置系统的输入如法就很方便,下面是参数相关的一些内容

双打模式(包括单双混合,比如微软输入法)

输入法状态 mode值
中文输入-半角-中文符号 -2147482623
中文输入-全角-中文符号 -2147482615
中文输入-半角-英文符号 -2147483647
中文输入-全角-英文符号 -2147483839
英文输入-半角-中文符号 -2147482624
英文输入-全角-中文符号 -2147482616
英文输入-半角-英文符号 -2147483648
英文输入-全角-英文符号 -2147483640

标准模式(全拼模式,比如智能ABC的标准模式)

输入法状态 mode值
中文输入-半角-中文符号 1025
中文输入-全角-中文符号 1033
中文输入-半角-英文符号 1
中文输入-全角-英文符号 9
英文输入-半角-中文符号 1024
英文输入-全角-中文符号 1032
英文输入-半角-英文符号 0
英文输入-全角-英文符号 8

这样就可以设置我们想要设置的打字法模式了,下面是我的一个demo,当输入的是中文,就让打字法继续为中文输入模式,是英文就继续为英文模式

 private void textBox1_TextChanged(object sender, EventArgs e)
        {
            Regex reg = new Regex(@"[u4e00-u9fa5]");
            string temp = textBox1.Text;
            string lastStr = temp.Substring(temp.Length - 1, 1);
                IntPtr prt = ImmGetContext(this.Handle);
            int curIMode = 0;
            int curISentence = 0;
            ImmGetConversionStatus(prt,ref curIMode,ref curISentence);
            if (reg.IsMatch(lastStr)&&(curIMode!=1025||curISentence!=0))
            {
                //如果是中文则切换成中文输入
                int iMode = 1025;
                int iSentence = 0;
                if (!ImmSetConversionStatus(prt, iMode, iSentence))
                {
                    MessageBox.Show("change error");
                }
            }
            else if(!reg.IsMatch(lastStr)&&(curIMode!=0||curISentence!=0))
            {

                //是英文则切换成英文输入
                int iMode = 0;
                int iSentence = 0;
                if (!ImmSetConversionStatus(prt, iMode, iSentence))
                {
                    MessageBox.Show("change error");
                }
            }
        }
原文地址:https://www.cnblogs.com/cellphoneyeah/p/6834786.html