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");
                    }
                }
            }
  • 相关阅读:
    ApplicationContext之getBean方法详解
    Windows10终端优化方案:Ubuntu子系统+cmder+oh-my-zsh
    向 Windows 高级用户进阶,这 10 款效率工具帮你开路 | 新手问号
    Ditto —— windows 剪贴板增强小工具(复制粘贴多条记录)
    Service Mesh服务网格:是什么和为什么
    正确理解Spring事务和数据库事务和锁
    Spring中@Transactional事务回滚(含实例详细讲解,附源码)
    五分钟搞清楚MySQL事务隔离级别
    事务并发的问题场景图解
    Spring的事务管理和数据库事务相关知识
  • 原文地址:https://www.cnblogs.com/cellphoneyeah/p/6834786.html
Copyright © 2011-2022 走看看