扫描码 是键盘对应按键的编码 ,虚拟键码 是操作系统对 “对应按键”的编码,
键盘ASCII码 ,是操作系统对“对应 虚拟键码”的编码(也称ASCII字符码或者字符码)

键盘扫描码:是每个键盘生产厂家为自己所生产的键盘设置的扫面方式,目的检测是那个键被按下。
ASCII码:是虚拟键码对应的编码。虚拟键码是按照相关国际标准制定,全世界的计算机都要遵守。
虚拟键码:为了解决不同键盘生产厂家生产键盘的排布或扫面方式不同,而建立的从键盘扫面到虚拟键码的映射,(即实现键盘扫描到虚拟键码的转换)

虚拟键码

在模拟键盘程序中会用到相关函数,其中有些步骤就是把正常的ASCII或者其他字符转换成虚拟键码!VkKeyScan就是将字符转换成虚拟键码用的。Windows开发者试图通过定义所谓的虚拟键码,以便经由与装置无关的方式处理键盘,这就是产生虚拟键码的目的!大多数虚拟键码的名称在WINUSER.H表头档案中都定义为以VK_开头。其中数字和字母的虚拟键码是ASCII码。Windows程式几乎从不使用这些虚拟键码;实际上,程式使用的是ASCII码字元的字元讯息。

虚拟指的是假定存在于思想中而不是现实世界中的一些事物,也只有熟练使用DOS组合语言编写应用程式的程式写作者才有可能指出,为什么对Windows键盘处理如此基本的键码是虚拟的而不是真实的。
对於早期的程式写作者来说,真实的键码由实际键盘硬体产生。在Windows文件中将这些键码称为「扫描码(scan codes)」。在IBM相容机种上,扫描码16是Q键,17是W键,18是E、19是R,20是T,21是Y等等。这时您会发现,扫描码是依据键盘的实际布局的。Windows开发者认为这些代码过於与设备相关了,於是他们试图通过定义所谓的虚拟键码,以便经由与装置无关的方式处理键盘。其中一些虚拟键码不能在IBM相容机种上产生,但可能会在其他制造商生产的键盘中找到,或者在未来的键盘上找到。
您使用的大多数虚拟键码的名称在WINUSER.H表头档案中都定义为以VK_开头。

当用户按下某个键时,  
1.键盘会检测到这个动作,并通过 键盘控制器 把 扫描码(scan code) 传送到计算机;   键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同。  
2.计算机接收到 扫描码 后,将其交给 键盘 驱动程序 ;  
3. 键盘驱动程序 把这个 扫描码 转换为 键盘虚拟码 ;   虚拟码与具体硬件无关,不同厂商的键盘,同一个键 的 虚拟码 总是相同的。
4.然后,键盘驱动程序 把该键盘操作的 扫描码 和 虚拟码 以及 其它信息 传递给 操作系统;
5.操作 系统将获得 的信息封装在一个 键盘消息 中,并把该 键盘消息 插入到 消息列队。 6.通过Windows的 消息系统,该 键盘消息 被送到 某个窗口 中;
7.窗口所在的应用程序 接收到消息后,可以了解到有关 键盘操作的信息,然后决定作出一定的响应

汇编中的扫描码、ASCII码(也称字符码)、扩展码、虚拟键码 的区别相关推荐

  1. 【Unity】在Unity中实现扫描二维码 生成二维码功能

    在Unity中使用二维码扫描功能需要我们在Unty中导入扫描库 下载地址:https://github.com/micjahn/ZXing.Net/releases 然后编写扫描脚本: 先在脚本上添加 ...

  2. java ascii码转字符_java中char对应的ASCII码的转化操作

    java中,char类型变量可以强制转化为int类型变量,int类型变量也可以强制转化成char类型的变量: char c='a'; int i=98; System.out.println((int ...

  3. 在计算机系统中储存一个ASCII码,ascii码在计算机中用多少byte存放?

    ascii码在计算机中用1个byte[字节]存放,ASCII码共有128个字符,每一个字符对应一个数值,称为该字符的ASCII码值:计算机内部用一个字节[8位二进制位]存放一个7位ASCII码值. 本 ...

  4. python生成签名sign(按照字典中的key的ascii码排序加上对应的key转换成url形式生成md5签名)

    Python签名 按照字典中的key的ascii码排序加上对应的key转换成url形式生成md5签名 请求参数(参数字典) parm = {"UnionId":"8888 ...

  5. 虚拟键码和扫描码的区别

    虚拟键码 扫描码 ASCII的区别与联系 1.每个厂家的键盘上的每个键都对应一个扫描码.例如,对于键盘上的'ALT'键,其扫描码可能是4. 2.键盘的驱动程序会把扫描码转成虚拟码.例如将上面的扫描码4 ...

  6. java中的string函数_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  7. java中trim_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  8. java中字节码_聊聊Java的字节码

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 巴山楚水凄凉地,二十三年弃置身. 怀旧空吟闻笛赋,到乡翻似烂柯人. 沉舟侧畔千帆过,病树前头万 ...

  9. 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...

    二维码相关---java生成二维码名片,并且自动保存到手机通讯录中... 技术qq交流群:JavaDream:251572072 1.首先介绍一个api.   Zxing是Google提供的关于条码 ...

最新文章

  1. 如何设计和管理AI产品?
  2. JavaScript学习笔记:检测数组方法
  3. Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER
  4. 【移动开发】安卓Lab2(02)
  5. 鸿蒙系统平板界面,华为鸿蒙系统界面首次曝光!首款预装鸿蒙设备正式入网:发布在即...
  6. 快速了解什么是CI/CD
  7. Android音频系统之AudioPolicyService
  8. 【平衡规划】Arithmetic Operations(CF1654E)
  9. idea python工程zip打包_【面试划重点】-- Python常见知识点
  10. SQL 死锁分析(转贴)
  11. python3.3使用tkinter实现猜数字游戏代码
  12. brew 一直等待_等待高高时,可以做的小事...
  13. linux安装gd,linux下 安装GD
  14. 利用 RUP达到 CMM2和3级
  15. 春节晚报 | 2月1日 星期二 | 快手推出首届“新春招工会”;罗永浩称“不做VR和元宇宙”;戴姆勒正式更名为梅赛德斯-奔驰...
  16. 移远4g LTE模块at指令集合
  17. 青岛软控为机电软一体化企业的PLM建设树立样板
  18. 解决MERCURY弹出上网公告的窗口方法
  19. perl语言的学习(一)
  20. 春季活动策划案例合集(共25份)

热门文章

  1. .net常用技巧及调优
  2. composer 更新版本
  3. Ubuntu使用——23(dock的美化)
  4. iptables加载顺序问题及优化方法
  5. 算法1-排序LowB三人组
  6. 实验6 在应用程序中播放音频和视频
  7. 分布式缓存DistributedCache的使用
  8. c#中页面之间传值传参的六种方法
  9. Hadoop 2.x的DistributedCache无法工作的问题
  10. window系统查看端口被哪个进程占用了,并将它结束