WIN7中使用c#控制微软拼音输入法

 

NET中,对于输入法的控制是比较鸡肋的一个功能,经常不能达到精确控制。

在XP中,使用以下代码 ,可以记录用户最后切换 的输入法,在某些特定的位置关闭输入法以免输入错误的全角数字及其它中文输入法下的问题。

但在WIN7中内置了两个拼音输入法,这两个输入法很奇怪,会和英文输入法混为一体,在这三种输入法中切换,不会引发InputLanguageChanged。

处于拼音输入法时,使用InputLanguage.CurrentInputLanguage = null 或InputLanguage.CurrentInputLanguage = DefaultInputLanguage,都不能使用输入法变成英文输入法。而且这两个输入法也不会出现 在InstalledInputLanguages 中。

 

我想,应该是微软天真的认为所有人都会用这两个输入法,永远不用切换输入法,而且可以完美的和IMEMODE结合在一起。不得已,在WIN7中添加了一行,强行对IMEMODE进行切换。虽然不能切换输入法,但可以关闭拼音输入法的中文输入状态。

 

当然,最好的办法还是不要使用这个拼音输入法。搜狗拼音会比它们好得多。

 

int imeIndex = 0;
        protected virtual void IMEControl(DataGridViewColumn col)
        {
            //不是默认输入法即认为是切换了输入法
            if (col.Index<2)
            {
                if (InputLanguage.CurrentInputLanguage != null && InputLanguage.CurrentInputLanguage.GetHashCode() != InputLanguage.DefaultInputLanguage.GetHashCode())
                {
                    imeIndex = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage);
                }
                if (InputLanguage.InstalledInputLanguages.Count > imeIndex)
                    InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages[imeIndex];
                else
                    InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
                //dataGridView1.ImeMode = System.Windows.Forms.ImeMode.On ;
            }
            else
            {
                if (InputLanguage.CurrentInputLanguage != null && InputLanguage.CurrentInputLanguage.GetHashCode() != InputLanguage.DefaultInputLanguage.GetHashCode())
                {
                    imeIndex = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage);

                }
                InputLanguage.CurrentInputLanguage = null ;
               // dataGridView1.ImeMode = System.Windows.Forms.ImeMode.Off;
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值