虚拟键码

虚拟键码

虚拟键码
虚拟键码保存在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

1

VK_LBUTTON

滑鼠左键

2

2

VK_RBUTTON

滑鼠右键

3

3

VK_CANCEL

Ctrl-Break

4

4

VK_MBUTTON

滑鼠中键

您永远都不会从键盘讯息中获得这些滑鼠键代码。在下一章可以看到,我们能够从滑鼠讯息中获得它们。VK_CANCEL代码是一个虚拟键码,它包括同时按下两个键(Ctrl-Break)。Windows应用程式通常不使用此键。

表6-3中的键--Backspace、Tab、Enter、Escape和Spacebar-通常用於Windows程式。不过,Windows一般用字元讯息(而不是键盘讯息)来处理这些键。

表6-3

十进位 十六进位 WINUSER.H识别字 必需? IBM相容键盘

十进制

十六进制

WINUSER.H识别字

IBM相容键盘

8

8

VK_BACK

Backspace

9

9

VK_TAB

Tab

12

0C

VK_CLEAR

Lock关闭时的数字键盘5

13

0D

VK_RETURN

Enter

16

10

VK_SHIFT

Shift

展开表格

另外,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

左箭头

展开表格

注意,许多名称(例如VK_PRIORWindows也包括在主键盘上的字母和数位键的虚拟键码(数字键盘将单独处理)。

十进位 十六进位 WINUSER.H识别字 必需? IBM相容键盘

十进制

十六进制

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键

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

数字键盘上的-

展开表格

最後,虽然多数的键盘都有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,可得到完整的列表。

虚拟键表

虚拟键码

对应值

对应键

VK_LBUTTON

1

鼠标左键

VK_RBUTTON

2

鼠标右键

VK_CANCEL

3

Cancel

VK_MBUTTON

4

鼠标中键

VK_XBUTTON1

5

展开表格

二维码介绍

当用户按下某个键时,

1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送到计算机;

键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同。

2.计算机接收到扫描码后,将其交给键盘驱动程序

3.键盘驱动程序把这个扫描码转换为键盘虚拟码

虚拟码与具体硬件无关,不同厂商的键盘,同一个键的虚拟码总是相同的。

3.然后,键盘驱动程序把该键盘操作的扫描码和虚拟码以及其它信息传递给操作系统;

4.操作系统将获得的信息封装在一个键盘消息中,并把该键盘消息插入到消息列队。

5.通过Windows的消息系统,该键盘消息被送到某个窗口中;

6.窗口所在的应用程序接收到消息后,可以了解到有关键盘操作的信息,然后决定作出一定的响应

键盘消息:WM_KEYDOWN

nVirtKey = (int) wParam; // 虚拟码

lKeyData = lParam; // 键盘操作的相关信息

键盘消息WM_KEYDOWN的第二个参数lParam比较复杂

其作用是指定重复次数、扫描码、扩展键标记、上下文环境码、前键状态标记、转换状态标记等

lParam: 总长4字节,32位

0–15位:用于指定当前消息的重复次数。当用户按下某个键持续一段时间的话,

该值是自动计数的按下某键的次数;若按键时间很长,则会发出多个消息,

且重复次数不会累计

16–23:指定扫描码

24:指定是否该键是一个扩展键(如alt、ctrl),若值为1表示是扩展键,否则其值为0

25–28:保留

29:指定上下文环境码。对于WM_KEYDOWN、WM_KEYUP消息,其值总为0,

对WM_CHAR消息,如果同时alt键被按下,则值为1,否则值为0.

30:指定前键状态。如果消息发送前该键是按下状态,其值为1,否则为0

31:指定转换状态,对于WM_KEYDOWN,其值总为0;

对于WM_CHAR,如果该键被释放,则其值为1,否则为0.

相关词条

相关搜索

其它词条