Windows按键消息—虚拟键码(转)
源地址:http://c.biancheng.net/cpp/html/1253.html
虚拟键码保存在WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN和WM_SYSKEYUP消息的wParam参数中。此代码标识按下或释放的键。
哈,又是「虚拟」,您喜欢这个词吗?虚拟指的是假定存在于思想中而不是现实世界中的一些事物,也只有熟练使用DOS汇编语言编写应用程序的程序写作者才有可能指出,为什么对Windows键盘处理如此基本的键码是虚拟的而不是真实的。
对于早期的程序写作者来说,真实的键码由实际键盘硬件产生。在Windows文件中将这些键码称为「扫描码(scan codes)」。在IBM兼容机种上,扫描码16是Q键,17是W键,18是E、19是R,20是T,21是Y等等。这时您会发现,扫描码是依据键盘的实际布局的。Windows开发者认为这些代码过于与设备相关了,于是他们试图通过定义所谓的虚拟键码,以便经由与设备无关的方式处理键盘。其中一些虚拟键码不能在IBM兼容机种上产生,但可能会在其它制造商生产的键盘中找到,或者在未来的键盘上找到。
您使用的大多数虚拟键码的名称在WINUSER.H表头文件中都定义为以VK_开头。表6-2列出了这些名称和数值(十进制和十六进制),以及与虚拟键相对应的IBM兼容机种键盘上的键。下表也标出了Windows执行时是否需要这些键。下表还按数字顺序列出了虚拟键码。
前四个虚拟键码中有三个指的是鼠标键:
|
表6-2 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
1 |
01 |
VK_LBUTTON |
鼠标左键 |
|
|
2 |
02 |
VK_RBUTTON |
鼠标右键 |
|
|
3 |
03 |
VK_CANCEL |
ˇ |
Ctrl-Break |
|
4 |
04 |
VK_MBUTTON |
鼠标中键 |
您永远都不会从键盘消息中获得这些鼠标键代码。在下一章可以看到,我们能够从鼠标消息中获得它们。VK_CANCEL代码是一个虚拟键码,它包括同时按下两个键(Ctrl-Break)。Windows应用程序通常不使用此键。
表6-3中的键--Backspace、Tab、Enter、Escape和Spacebar-通常用于Windows程序。不过,Windows一般用字符消息(而不是键盘消息)来处理这些键。
|
表6-3 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
8 |
08 |
VK_BACK |
ˇ |
Backspace |
|
9 |
09 |
VK_TAB |
ˇ |
Tab |
|
12 |
0C |
VK_CLEAR |
Num Lock关闭时的数字键盘5 |
|
|
13 |
0D |
VK_RETURN |
ˇ |
Enter (或者另一个) |
|
16 |
10 |
VK_SHIFT |
ˇ |
Shift (或者另一个) |
|
17 |
11 |
VK_CONTROL |
ˇ |
Ctrl (或者另一个) |
|
18 |
12 |
VK_MENU |
ˇ |
Alt (或者另一个) |
|
19 |
13 |
VK_PAUSE |
Pause |
|
|
20 |
14 |
VK_CAPITAL |
ˇ |
Caps Lock |
|
27 |
1B |
VK_ESCAPE |
ˇ |
Esc |
|
32 |
20 |
VK_SPACE |
ˇ |
Spacebar |
另外,Windows程序通常不需要监视Shift、Ctrl或Alt键的状态。
表6-4列出的前八个码可能是与VK_INSERT和VK_DELETE一起最常用的虚拟键码:
|
表6-4 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
33 |
21 |
VK_PRIOR |
ˇ |
Page Up |
|
34 |
22 |
VK_NEXT |
ˇ |
Page Down |
|
35 |
23 |
VK_END |
ˇ |
End |
|
36 |
24 |
VK_HOME |
ˇ |
Home |
|
37 |
25 |
VK_LEFT |
ˇ |
左箭头 |
|
38 |
26 |
VK_UP |
ˇ |
上箭头 |
|
39 |
27 |
VK_RIGHT |
ˇ |
右箭头 |
|
40 |
28 |
VK_DOWN |
ˇ |
下箭头 |
|
41 |
29 |
VK_SELECT |
||
|
42 |
2A |
VK_PRINT |
||
|
43 |
2B |
VK_EXECUTE |
||
|
44 |
2C |
VK_SNAPSHOT |
Print Screen |
|
|
45 |
2D |
VK_INSERT |
ˇ |
Insert |
|
46 |
2E |
VK_DELETE |
ˇ |
Delete |
|
47 |
2F |
VK_HELP |
注意,许多名称(例如VK_PRIOR和VK_NEXT)都与键上的标志不同,而且也与滚动条中的标识符不统一。Print Screen键在平时都被Windows应用程序所忽略。Windows本身响应此键时会将视讯显示的位图影本存放到剪贴板中。假使有键盘提供了VK_SELECT、VK_PRINT、VK_EXECUTE和VK_HELP,大概也没几个人看过那样的键盘。
Windows也包括在主键盘上的字母和数字键的虚拟键码(数字键盘将单独处理)。
|
表6-5 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
48-57 |
30-39 |
无 |
ˇ |
主键盘上的0到9 |
|
65-90 |
41-5A |
无 |
ˇ |
A到Z |
注意,数字和字母的虚拟键码是ASCII码。Windows程序几乎从不使用这些虚拟键码;实际上,程序使用的是ASCII码字符的字符消息。
表6-6所示的代码是由Microsoft Natural Keyboard及其兼容键盘产生的:
|
表6-6 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
91 |
5B |
VK_LWIN |
左Windows键 |
|
|
92 |
5C |
VK_RWIN |
右Windows键 |
|
|
93 |
5D |
VK_APPS |
Applications键 |
Windows用VK_LWIN和VK_RWIN键打开「开始」菜单或者(在以前的版本中)启动「工作管理员程序」。这两个都可以用于登录或注销Windows(只在Microsoft Windows NT中有效),或者登录或注销网络(在Windows for Applications中)。应用程序能够通过显示辅助信息或者当成快捷方式键看待来处理application键。
表6-7所示的代码用于数字键盘上的键(如果有的话):
|
表6-7 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
96-105 |
60-69 |
VK_NUMPAD0到VK_ NUMPAD9 |
NumLock打开时数字键盘上的0到9 |
|
|
106 |
6A |
VK_MULTIPLY |
数字键盘上的* |
|
|
107 |
6B |
VK_ADD |
数字键盘上的+ |
|
|
108 |
6C |
VK_SEPARATOR |
||
|
109 |
6D |
VK_SUBTRACT |
数字键盘上的- |
|
|
110 |
6E |
VK_DECIMAL |
数字键盘上的. |
|
|
111 |
6F |
VK_DIVIDE |
数字键盘上的/ |
最后,虽然多数的键盘都有12个功能键,但Windows只需要10个,而位旗标却有24个。另外,程序通常用功能键作为键盘快捷键,这样,它们通常不处理表6-8所示的按键:
|
表6-8 |
|
十进制 |
十六进制 |
WINUSER.H标识符 |
必需? |
IBM兼容键盘 |
|
112-121 |
70-79 |
VK_F1到VK_F10 |
ˇ |
功能键F1到F10 |
|
122-135 |
7A-87 |
VK_F11到VK_F24 |
功能键F11到F24 |
|
|
144 |
90 |
VK_NUMLOCK |
Num Lock |
|
|
145 |
91 |
VK_SCROLL |
Scroll Lock |
另外,还定义了一些其它虚拟键码,但它们只用于非标准键盘上的键,或者通常在大型主机终端机上使用的键。查看/ Platform SDK / User Interface Services / User Input / Virtual-Key Codes,可得到完整的列表。
Windows按键消息—虚拟键码(转)的更多相关文章
- 【转】Windows按键消息—虚拟键码
来源:http://c.biancheng.net/cpp/html/1253.html 虚拟键码保存在WM_KEYDOWN.WM_KEYUP.WM_SYSKEYDOWN和WM_SYSKEYUP消息的 ...
- 学习windows编程 day5 之按键消息
case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...
- windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...
- Windows窗口消息大全(转)
Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #inc ...
- Windows窗口消息大全
////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H& ...
- Windows 窗体消息大全(速查)
Windows窗口消息大全,全不全自己撸 通用窗口消息 WM_NULL:--------->空消息,可检测程序是否有响应等 WM_CREATE:--------->新建一个窗口 WM_DE ...
- 键盘键与虚拟键码对照表+delphi虚拟键码对应关键
键盘键与虚拟键码对照表 字母和数字键 数字小键盘的键 功能键 其它键 键 键码 键 键码 键 键码 键 键码 A 65 0 96 F1 112 Backspace 8 B 66 1 97 F2 113 ...
- 在C#程序中模拟发送键盘按键消息
using System.Runtime.InteropServices; 引入键盘事件函数 [DllImport("user32.dll")]public static exte ...
- Formview单文档或对话框项目接受不到按键消息的解决办法
当对话框或formview界面上有控件时,由于焦点在控件上,因此wm_char,wm_keydown等按键消息会被控件捕获,而导致对话框或formview无法接受该类按键消息.这时候通常的解决方法是在 ...
随机推荐
- C++11类内static成员变量声明与定义
众所周知,将一个类内的某个成员变量声明为static型,可以使得该类实例化得到的对象实现对象间数据共享. 在C++中,通常将一个类的声明写在头文件中,将这个类的具体定义(实现)写在cpp源文件中. 因 ...
- Redis的安装配置及简单集群部署
最近针对中铁一局项目,跟事业部讨论之后需要我们的KF平台能够接入一些开源的数据库,于是这两天研究了一下Redis的原理. 1. Redis的数据存储原理及简述 1.1Redis简述 Redis是一个基 ...
- Centos7 使用yum安装MariaDB与MariaDB的简单配置与使用
一.mariadb的安装 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜 ...
- html弹出框播放视频
<a data-toggle="modal" data-target=".bs-example-modal-lg">模态框</a> &l ...
- 无需密码攻击 Microsoft SQL Server
最近的一次渗透测试里,在我们捕获的一些数据包中发现了一些未经加密的 Microsoft SQL Server(MSSQL) 流量.起初,我们认为这样就可以直接嗅探到认证凭证,然而,MSSQL 加密了认 ...
- UniCode 速查表
unicode速查表 0000–0FFF 1000–1FFF 2000–2FFF 3000–3FFF 4000–4FFF 5000–5FFF 6000–6FFF 7000–7FFF 8000–8FFF ...
- java并发之CopyOnWriteArraySet
java并发之CopyOnWriteArraySet CopyOnWriteArraySet是基于CopyOnWriteArrayList实现的,持有CopyOnWriteArrayList的内部对象 ...
- C#.NET解析XML(使用属性控制 XML 序列化)
使用属性可以控制对象的 XML 序列化. 默认情况下,XML 元素名称由类或成员名称确定.在名为 Book 的简单类中,字段 ISBN 将生成 XML 元素标记 <ISBN>,如下面的示例 ...
- Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)
0. 前言 最近受“新冠肺炎”疫情影响,在家等着,入职暂时延后,在家里办公和学习 尝试通过源码编译二进制的方式在单一节点(Master 与 Node 部署在同一个机器上)上部署一个 k8s 环境,整理 ...
- LeetCode 297.序列化二叉树 - JavaScript
题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法 ...