YG_jzjz 2022-08-01 09:50 采纳率: 0%
浏览 91
已结题

win10 C# 指定输入法

环境:window10系统,装有 微软拼音 微软五笔 搜狗输入法
语言:最好是C#语言
需求:切换为任意指定输入法
遇到的问题:win7下的IMM那一套方法已经不能用了

目前我采用了TSF框架中设置指定输入法,可以获取输入法列表,但不能设置输入法
请给一个具体的解决方案或者代码

  • 写回答

2条回答 默认 最新

  • ilmss 2022-08-01 11:38
    关注

    InputLanguage方案
    使用System.Windows.Forms.InputLanguage[1],判断/设置当前输入法状态;

    获取当前输入法

        /// <summary>
        /// 获取当前输入法
        /// </summary>
        /// <returns></returns>
        private string GetCultureType()
        {
            var currentInputLanguage = InputLanguage.CurrentInputLanguage;
            var cultureInfo = currentInputLanguage.Culture;
            //同 cultureInfo.IetfLanguageTag;
            return cultureInfo.Name;
        }
    
    

    切换输入法

        /// <summary>
        /// 切换输入法
        /// </summary>
        /// <param name="cultureType">语言项,如zh-CN,en-US</param>
        private void SwitchToLanguageMode(string cultureType)
        {
            var installedInputLanguages = InputLanguage.InstalledInputLanguages;
     
            if (installedInputLanguages.Cast<InputLanguage>().Any(i => i.Culture.Name == cultureType))
            {
                InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo(cultureType));
                CurrentLanguage = cultureType;
            }
        }
    
    

    通过InputLanguage的设置,可以统一同一进程内的输入法。比如切换成英文输入法后,当前程序周期内一直是英文输入状态。

    InputMethod附加属性
    System.Windows.Input.InputMethod,API原文给的注释是:

    可以提供用于管理和使用文本服务框架,它提供的替换文字,如语音和手写的输入法支持的交互功能

    1) InputMethod下有依赖属性PreferredImeConversionMode,可以限定输入字符类型,同时切换语言栏的中英文状态。

    此属性设置了限定输入字符后,可以通过人工切换输入法,切换回其它输入法。

    2)InputMethod.IsInputMethodEnabled,也可以设置中英文输入法限定

    一旦设置了,输入控件的输入法不可人工切换。除非重新设置IsInputMethodEnabled值。

    InputMethod适合程序周期内,不同输入框分别有不同输入法的情况。

    比如下面俩个文本框的输入法限定:

         //通过InputMethod.PreferredImeConversionMode附加属性,设置输入框的输入法输入转换模式,即限定输入字符类型
         InputMethod.SetPreferredImeConversionMode(InputTestTextBox0, ImeConversionModeValues.Alphanumeric);
         InputMethod.SetPreferredImeConversionMode(InputTestTextBox1, ImeConversionModeValues.Native);
    
    

    ImeConversionModeValues枚举值列表如下:

    /// <summary>描述要执行的一种输入法输入转换模式。</summary>
      [Flags]
      public enum ImeConversionModeValues
      {
        /// <summary>输入的法使用本机字符 (平假名、 朝鲜语、 繁体中文) 转换模式。</summary>
        Native = 1,
        /// <summary>输入的法使用片假名转换模式。</summary>
        Katakana = 2,
        /// <summary>输入的法使用全形转换模式。</summary>
        FullShape = 4,
        /// <summary>输入的法使用罗马字符转换模式。</summary>
        Roman = 8,
        /// <summary>输入的法使用字符代码转换模式。</summary>
        CharCode = 16, // 0x00000010
        /// <summary>输入的方法不会执行任何输入的转换。</summary>
        NoConversion = 32, // 0x00000020
        /// <summary>输入的法使用 EUDC (最终用户定义的字符) 转换模式。</summary>
        Eudc = 64, // 0x00000040
        /// <summary>输入的法使用符号转换模式。</summary>
        Symbol = 128, // 0x00000080
        /// <summary>输入的法使用固定的转换模式。</summary>
        Fixed = 256, // 0x00000100
        /// <summary>输入的法使用字母数字的转换模式。</summary>
        Alphanumeric = 512, // 0x00000200
        /// <summary>输入的方法并不关心使用哪种输入的转换方法;实际的转换方法是不确定的。</summary>
        DoNotCare = -2147483648, // -0x80000000
      }
    
    

    备注:如果是winform程序,可以直接设置Control.ImeMode属性

    评论

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值