源地址: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按键消息—虚拟键码(转)的更多相关文章

  1. 【转】Windows按键消息—虚拟键码

    来源:http://c.biancheng.net/cpp/html/1253.html 虚拟键码保存在WM_KEYDOWN.WM_KEYUP.WM_SYSKEYDOWN和WM_SYSKEYUP消息的 ...

  2. 学习windows编程 day5 之按键消息

    case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...

  3. windows 编程 —— 消息与参数(滚动条、键盘、鼠标)

    目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...

  4. Windows窗口消息大全(转)

    Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #inc ...

  5. Windows窗口消息大全

    ////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H& ...

  6. Windows 窗体消息大全(速查)

    Windows窗口消息大全,全不全自己撸 通用窗口消息 WM_NULL:--------->空消息,可检测程序是否有响应等 WM_CREATE:--------->新建一个窗口 WM_DE ...

  7. 键盘键与虚拟键码对照表+delphi虚拟键码对应关键

    键盘键与虚拟键码对照表 字母和数字键 数字小键盘的键 功能键 其它键 键 键码 键 键码 键 键码 键 键码 A 65 0 96 F1 112 Backspace 8 B 66 1 97 F2 113 ...

  8. 在C#程序中模拟发送键盘按键消息

    using System.Runtime.InteropServices; 引入键盘事件函数 [DllImport("user32.dll")]public static exte ...

  9. Formview单文档或对话框项目接受不到按键消息的解决办法

    当对话框或formview界面上有控件时,由于焦点在控件上,因此wm_char,wm_keydown等按键消息会被控件捕获,而导致对话框或formview无法接受该类按键消息.这时候通常的解决方法是在 ...

随机推荐

  1. [aac @ ...] more samples than frame size (avcodec_encode_audio2)

    在用FFmpeg对音频进行编码的时候报如下错误: [aac @ 000001cfc2717200] more samples than frame size (avcodec_encode_audio ...

  2. ATT&CK实战系列——红队实战(一)

    一.环境搭建 1.环境搭建测试 最近想要开始学习内网渗透,搜集了一些教程,准备先实验一个vulnstack靶机,熟悉一下内网渗透操作再学习基础知识. 靶场下载地址:http://vulnstack.q ...

  3. 让AUTOIT自动帮我更新文件服务器上的一些常用软件

          要解决的问题:   一个朋友的公司(上班时间员工均无外网)最近全部员人都安装上了360安全卫士,补丁在局域网内升级...但360主程序在没有外网的情况下是不能升级的.....需要朋友经常去 ...

  4. sklearn实现决策树算法

    1.决策树算法是一种非参数的决策算法,它根据数据的不同特征进行多层次的分类和判断,最终决策出所需要预测的结果.它既可以解决分类算法,也可以解决回归问题,具有很好的解释能力.另外,对于决策树的构建方法具 ...

  5. Java对象根据属性排序

    参考:https://blog.csdn.net/wangtaocsdn/article/details/71500500

  6. MariaDB——数据库基础与sql语句

    数据库介绍 什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据 ...

  7. 深入理解python(三)python字符编码和字符串处理

    说是有选择和循环分支,,也实在没有什么比较大的坑要注意的,所以就直接进入比较令人困扰的地方 unicode和字符串 这个地方是一直以来我比较头痛的地方,因为坑比较多而且python3和python2在 ...

  8. java与MySQL数据库的连接

    java与MySQL数据库的连接 1.数据库的安装和建立参见上一篇博客中的第1,2步骤.(http://blog.csdn.net/nuptboyzhb/article/details/8043091 ...

  9. Vue项目中v-for无法渲染数据

    在Vue项目中,我们想要实现下面的布局效果 后端返回的数据格式如下,可以看出产品列表五张图的数据位于同一个数组中 而我的html结构如下: 我希望直接渲染左边一张大图,然后右边的四张小图通过v-for ...

  10. UITree_study

    1.Create canvas 2.Add TreeView 3.Subscribe and unsubscribe events(订阅和取消订阅事件) 4.Data bind items it's ...