分享

二、Windows 按键消息

 bubbi7 2017-01-18

  虚拟键码保存在 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,可得到完整的列表。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多