首先我们要知道什么是输入法,我们经常用输入法,但是你发现一个现象没有?,在任务管理器中并没有看到输入法进程。当然了搜狗那种流氓软件除外,说不定正在后台做什么偷偷摸摸的事情,当然要创建进程。输入法的核心文件你找到安装目录就会发现一个后缀是.ime的文件,你用十六进制查看器看看就会发现他其实是一个类似dll的模块,当一个进程打开输入法要输入汉字的时候其实就是载入了这个模块,如下图:

在这个模块里进行文字的接收,处理,发送。

一.Windows 9x系统

系统的键盘事件有windows的user.exe软件接收后,user.exe在将键盘事件传导输入法管理器(Input MethodManager,简称IMM)中,管理器 再将键盘事件传到输入法中,输入法根据用户编码字典,翻译键盘事件为对应的汉字(或汉字串),然后再反传到user.exe中,user.exe再将翻译后的键盘事件传给当前正运行的应用程序,从而完成汉字的输入。这个是windows 9x系统下的。

二,windows NT系统

这个是重点。

Windows XP系统下的输入法和9x系统的输入法有很大区别,对输入法的处理完全不同。这个是我花了一下午和一位论坛好友交流的结果,说是交流,其实就是他单向传授与我,呵呵。废话不多说,我们开始。

先看一段程序

[cpp] view plaincopyprint?
  1. while((r=GetMessageW(&msg,0,0,0))!=-1)
  2. {
  3. if(r==0)break;
  4. TranslateMessage(&msg);
  5. DispatchMessageW(&msg);
  6. }
while((r=GetMessageW(&msg,0,0,0))!=-1){if(r==0)break;TranslateMessage(&msg);DispatchMessageW(&msg);}

这是一个消息循环,直到r等于0,表示有WM_QUIT,r=-1表示出错,是系统从消息队列中取消息的一般过程。那么输入法是怎么回事呢?

一般情况下GetMessage得到WM_KEYDOWN的wParam是虚拟键码,如果我们开了输入法,WM_KEYDOWN的wParam虚拟码是VK_PROCESSKEY,TranslateMessage对一般的虚拟键码是产生WM_CHAR,WM_SYSCHAR之类的,但是当TranslateMessage遇到了VK_PROCESSKEY,就会有特殊处理。这时候TranslateMessage就会把控制权交给DefWindowProc这个缺省的消息处理例程,DefWindowProc再通知输入法程序的窗口,把那些候选的显示出来,当你的你输入法将接受到的虚拟码做一系列转换以后合成相应的汉字,输入法再将合成好的WM_CHAR用PostMess插入消息队列,Edit控件接受WM_CHAR显示字符。

如果你没有开输入法WM_CHAR直接由 TranslateMessage产生。

流程图如下:

有好东西不忘和大家分享一下,呵呵。

这种说法肯定有许多错误和不足,毕竟我是菜鸟,欢迎指正。

最后一句,菜鸟言论,仅供娱乐。

【转载】浅析输入法原理相关推荐

  1. 浅析bootstrap原理及优缺点

    网格系统的实现原理,是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统 网格系统的实现原理,是通过定义容器 ...

  2. 手把手带你学会Odoo OWL组件开发(5):浅析OWL原理

    [本系列内容直达:] 手把手带你学习Odoo OWL组件开发(1):认识 OWL 手把手带你学会Odoo OWL组件开发(2):OWL的使用 手把手带你学会Odoo OWL组件开发(3):核心内容指南 ...

  3. 浅析Kerberos原理,及其应用和管理

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/5269739.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  4. 浅析ajax原理与用法

    1 ajax原理 Ajax(Asynchronous JavaScript and XML (异步的JavaScript和XML)),是一种快速创建 动态网页的技术,目的是显示动态局部刷新.通过XML ...

  5. [转载] ANTLR——编译原理基础知识

    来源:ANTLR中文网站:http://www.antlr.org.cn 编译是将计算机高级语言如C++.Java.C#编写的源程序翻译成可以在计算机上执行的机器语言的翻译过程.编译过程中分:词法分析 ...

  6. 【转载】Kerberos原理--经典对话

    这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原理而写的一篇对话集.里面有两个虚构的人物:Athena和Euripides, ...

  7. 浅析foreach原理

    在日常开发工作中,我们发现很多对象都能通过foreach来遍历,比如HashTable.Dictionary.数组等数据类型.那为何这些对象能通过foreach来遍历呢?如果写一个普通的Person类 ...

  8. 优秀技术文章转载备份 --- 变速原理

    转载: 注:为节省篇幅,本文对一些计算机术语直接使用而没有作详细的解释,读者若有不熟悉之处,建议参考清华大学出版社出版,周明德编著的<微型计算机系统原理及应用>一书中关于8253/8254 ...

  9. [转载]游戏外挂原理

    最近同学在折腾外挂 我也就把这篇发上来吧 以前的文章了 也不知道那里来的了..... 1.游戏外挂的原理 外挂现在分为好多种,比如模拟键盘的,鼠标的,修改数据包的,还有修改本地内存的,但好像没有修改服 ...

最新文章

  1. usaco Job Processing(mark)
  2. 大话App测试2.0笔记2
  3. git解决pre-commit hook failed的问题
  4. 自定义Java注解(一)
  5. 【转】DB2 常用命令
  6. 李涓子 | 机器智能加速器:大数据环境下知识工程的机遇和挑战
  7. 常用工具说明--mongodb、mysql解压版、IDEA配置maven
  8. 连通域的原理与Python实现
  9. 分享 | 开源的中文语音识别系统
  10. 19.go fix 和 go tool fix
  11. Android 定位地理坐标体系
  12. (HDFS)搭建eclipse搭建hadoop开发平台以及hdfs api调用——大数据分析及其可视化4
  13. 硅谷之火何时才能引燃中国的OS
  14. 正则表达式实现中文的大写字符
  15. 从电商到软件市场,阿里双十一战火蔓延
  16. 小程序、容器、SCF、直播加速…最全面的云端架构技术揭秘
  17. ajax errorthrown属性,【技术】error:function (XMLHttpRequest, textStatus, errorThrown)
  18. Altium Designer PCB板框扩大
  19. 2021-07-02-MySQL必知必会-笔记
  20. MCNP学习笔记之命令行与接续运行

热门文章

  1. 在线编辑_水墨-在线 Markdown 编辑器
  2. ElasticSearch关于映射mapping介绍
  3. SQL:如何用一个sql统计出全校男生个数、女生个数以及总人数
  4. 机器学习笔记(十九)——最大熵原理和模型定义
  5. 互联网晚报 | 3月29日 星期二 | 豆瓣私密小组将停用;辉瑞口服药深圳小规模临床显示初步疗效...
  6. 为什么很多企业都喜欢鹅厂出来的产品经理?
  7. 10篇产品大V精华文章,你值得一读
  8. 在线教育行业内容营销洞察白皮书(2021年版)
  9. 中国居住服务业数字化发展报告
  10. eclipse类文件无法找到_「Revit技巧」新建项目和族时无法找到样板文件(丢失)?...