网站建设
  简约型网页设计套餐998
  实惠型网站建设套餐2580
  综合型网站制作套餐4980
  网站改版与网站维护
  行业网站建设方案
  大型网站建设解决方案
  企业网站建设流程
  帝网科技网站设计与网站制作
建站FAQ
·网站空间问题解答
·企业邮箱问题解答
 
酷站欣赏
·房产酷站(379)
·综合门户(8 9)
·建筑装饰(603)
·手机通讯(354)
·生活购物(376)
·医疗保健(199)
·文化摄影(602)
·休闲体育(399)
>>更多酷站欣赏
网站优化
·Google(谷歌)优化   ·百度(BaiDu)优化
·雅虎(Yahoo)优化    ·Alexa排名优化   
·Google AdSense   ·DMOZ目录提交  
建站知识
·网站建设知识·网站名词解释·网站运营知识
·网络营销知识·搜索引擎知识·实用技术文摘
网站推广
百度网站推广 google网站推广
搜狐网站推广 网易网站推广
新浪网站推广   雅虎网站推广
  您当前位置: 当前位置:帝网科技 >> web开发 >> .NET专栏 >> 浏览文章
 
 
在应用程序中精确切换输入法
作者:佚名 来源:帝网科技 日期:2010年02月24日 点击数:


  如果在你的程序里需要输入很多的内容,比如各类单据,如果在进入每一个录入框的时候都能自动把输入法切换到合适的状态将会是一个很酷的特性,相比炫丽的界面而言打字到手抽筋的录入人员们对此会更加感兴趣。在winform中切换输入法是很简单的事情:

  foreach (InputLanguage iL in InputLanguage.InstalledInputLanguages)

  {

  if (iL.LayoutName == "智能ABC")

  {

  InputLanguage.CurrentInputLanguage = iL;

  break;

  }

  }

  这样子就能很轻松的吧输入法切换到智能ABC了。

  但是这样子的效果是不完美的,这个方法不能指定IME的状态,也就是IME的转换状态。这个概念是只有远东地区的windows才存在的状态,因为对于英语国家来说输入根本不存在输入法,而法语,俄语等拉丁语系的拼音文字的语言都只需要简单的修改键映射关系就行了,只有受中文影响的东亚地区有输入法的概念,比如日文和朝鲜文,为了方便输入,这些IME中都有很多状态,比如微软日文输入法:

  

点此在新窗口浏览图片

 

  日文输入包含了全角半角平假名,全角半角片假名等录入的状态,还包括了:

  

点此在新窗口浏览图片

 

  普通,名字,对话和不转换四种假名到当用汉字的转换模式

  汉语的输入法简单一些,不存在对汉字的转换,不过也存在为了中英交替录入(牛逼哄哄的日本人喜欢用片假名替换英文所以不存在交替录入)而存在的中英录入模式转换,中英标点符号装换,还有全角半角的转换:

  

点此在新窗口浏览图片

 

  如果是用的很古老的智能ABC的话,那么还存在双打和标准模式的切换。

  对于这些五花八门的输入法中的输入模式,如果在选择了确定要输入法,同时也要确定要唯一定位到输入的模式,那么 InputLanguage 类的功能就捉襟见肘了。

  在windows的文字服务IMM中对IME提供了ConvertionStatus的接口来确定输入法的工作模式,在Win32API中就是

  ImmGetConversionStatus和ImmSetConversionStatus

  这两个函数都有三个参数,一个是输入法IME的句柄,一个是mode,一个是sentence,最重要的就是mode和sentence这两个参数了,他们就是确定输入法状态的数据。经过测试发现,每个输入法的值都不一样,所以看MSDN去解析这两个int变量所对应的枚举值有哪些意义完全没必要,太复杂了,而我们只需要精确的切换到某个模式,只需要记录下这些模式下mode和sentence的值就行了。

  下面是中文输入法的状态和mode值的对应关系表

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

  输入法状态mode值

  中文输入-半角-中文符号-2147482623

  中文输入-全角-中文符号-2147482615

  中文输入-半角-英文符号-2147483647

  中文输入-全角-英文符号-2147483639

  英文输入-半角-中文符号-2147482624

  英文输入-全角-中文符号-2147482616

  英文输入-半角-英文符号-2147483648

  英文输入-全角-英文符号-2147483640

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

  输入法状态mode值

  中文输入-半角-中文符号1025

  中文输入-全角-中文符号1033

  中文输入-半角-英文符号1

  中文输入-全角-英文符号9

  英文输入-半角-中文符号1024

  英文输入-全角-中文符号1032

  英文输入-半角-英文符号0

  英文输入-全角-英文符号8

  由于不同的输入法对于模式的支持不同,比如搜狗支持的是标准模式,但是由于本身的功能又可以双打,但是设置模式却要用标准模式的值,而微软拼音是双打模式,而和同在双打模式智能ABC的sentence值又不一样,所以还是要根据具体的输入法测试后决定用什么数值来实现转换。

  附1:

  转换的代码:

  首先注册Win32API的方法

  [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);

  foreach (InputLanguage iL in InputLanguage.InstalledInputLanguages)

  {

  if (iL.LayoutName == "中文(简体)-搜狗拼音输入法")

  {

  InputLanguage.CurrentInputLanguage = iL;

  break;

  }

  }

  IntPtr prt = ImmGetContext(this.Handle);

  int iMode = 1033;

  int iSentence = 0;

  if (!ImmSetConversionStatus(prt, iMode, iSentence))

  {

  MessageBox.Show("change error");

  }

  这样就能把输入法确定为搜狗拼音,且为全角的数字符号和英文,且标点符号为中文标点。

  附2:

  日文输入法的值

  日文输入法的假名和全半角模式由mode值控制

  模式mode 值

  DirectInput25

  Hiragana25

  Full Width Katakana27

  Full Width Alphanumeric24

  Half Width Katakana19

  Half Width Alphanumeric16

  当用汉字的转化模式由 sentence 的值控制

  模式值

  般8

  名1

  话16

  无0

  附三:

  棒子国输入法………没有用过,省略了吧

  相关文章
 
·ASP.NET使用log4Net日志组件教程(日志
·ASP.NET MVC 框架
·C#实现的BinaryTree
·WebForms使用System.Web.Routing
·ASP.NET获取远程网页下载到本地文件
·一个“简单”的ASP.NET的服务器控件
·ASP.net与PHP两大网站开发架构优势对比
·教你七招提高.NET网站性能
·ASP.NET未来:简化开发 HTML5性能提升
·ASP.NET实现类似Excel的数据透视表
·FileUpload上传多文件出现错误的解决方
·.NET从优酷专辑中采集所有视频及信息(
·ASP.NET 4中的SEO改进
·详解Asp.net MVC DropDownLists
·提高ASP.NET应用程序性能的几招方法
·asp.net实现51job地区选择效果
·ASP.NET中创建GeoRSS订阅源
·ASP.NET 4.0开发更加简便
·ASP.NET页面间数据传递的方法
·ASP.NET的SEO:使用.ashx文件——排除
 
 

公司环境 | 合作伙伴 | 人才招聘 | 付款方式 | 关于我们

地址:广州市天河区中山大道中120号D805 电话:020-82529556 传真:020-82529556
广州帝网网络科技有限公司 版权所有 粤ICP备08119341号