虚拟键码保存在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编程中用于处理键盘输入,它们在WM_KEYDOWN等消息的wParam中传递。虚拟键码是设备无关的,如VK_LBUTTON表示左鼠标键,VK_A表示'A'键等。这些键码定义在WINUSER.H中,并覆盖了从基本的Backspace、Tab到方向键、功能键等多种按键。Windows应用程序通常通过ASCII码处理字符输入,而非直接使用虚拟键码。
2774

被折叠的 条评论
为什么被折叠?



