zoukankan      html  css  js  c++  java
  • 切换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");
                    }
                }
            }
  • 相关阅读:
    均匀分布
    深度学习0开始
    w3 parse a url
    【Docker学习之一】初始Docker
    【Spring Cloud学习之六】断路器-Hystrix
    【Spring Cloud学习之五】配置中心
    【Spring Cloud学习之四】Zuul网关
    【Spring Cloud学习之三】负载均衡
    【Spring Cloud学习之二】服务注册和发现
    【Spring Cloud学习之一】微服务架构
  • 原文地址:https://www.cnblogs.com/cellphoneyeah/p/6834786.html
Copyright © 2011-2022 走看看