• 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,可得到完整的列表。

  • 相关阅读:
    智能实验室-杀马(Defendio) 4.12.0.800
    智能实验室-结构化存储浏览器(SSExplorer) 1.7.0.170
    智能实验室-全能优化(Guardio) 4.94.0.830
    智能实验室-全能优化(Guardio) 4.9.0.790
    IT餐馆—第二十二回 控件
    当DiscuzNT遇上了Loadrunner(中)
    在Discuz!NT中进行缓存分层(本地缓存+memcached)
    介绍三个Silverlight 在线编辑器控件
    玩玩负载均衡在window与linux下配置nginx
    IT餐馆—第十八回 祭奠
  • 原文地址:https://www.cnblogs.com/happinessday/p/6902747.html
Copyright © 2020-2023  润新知