当前位置:首页 > 百科

虚拟键码

虚拟键码保存在WM_KEYDOWN、WM_KEYUP、游吸评货WM_SYSKEYDOWN和WM_武罗唱画室SYSKEYUP讯息的wParam参数中。是此代码标识按下或释放的键。

  • 中文名称 虚拟键码
  • 保存在 WM_KEYDOWN等
  • 程序 Windows程序
  • 代码标识 按下或释放的键

简介

  虚拟指的是假定存在于思想中而不是现实世界中的一些事物,也是只有熟练使用DOS组合语言编写应用程式的程式写作者才有可能指出,为什么对Window来自s键盘处理如此基本的键码是虚拟的而不是真实的。

  对於早期的程式写作者来说,真实的键码由实际键盘硬体产生。在Windows文件中将这些键码称为"扫描码(scan codes)"。在IBM相容机种上,扫描码16是Q键,17是W键,360百科18是E、19是R,20是T,21是Y等等。这时您会发现,扫描码是依据键盘的实际布局的。Windows开发者认为这些代码镇坐范气错杂毛厂推明过於与设备相关了,於是他们试图通过定义所谓的虚拟键码,以便经由与装置无关的方式处理键盘。其中一些虚拟键码不能在IBM相容机种上产生,但可能会在其他制造商生产的键盘中找到,或者在未来的键盘上找到。

  您使用的大多数虚拟键码的名称在WINUSER.H头文件中都定义为以VK_开头。表1列出了这些名称和数值(十进位和十六进位),以及与虚拟键相对应的IBM相容机种键盘上的键。下表也标出了Windows执行时是否需要这些键。下表还按数位顺序列出了虚拟键码

  前四个虚拟键码中有三个指的是鼠标键:

  表1

  十进

  十六进制

  winuse啊成妈茶肉早希明r.h识别字

  IB失额例听剧福感确M相容键盘对应键

  1

  0x01

  VK_LBUTTON

  鼠标左键

  2

  0x02

  VK_RBU父挥TTON

  鼠标右键

  3

 数夫细胶历 0x03

  VK_CANCEL

  Ctrl-Break

  4

  0x04

  VK_MBUTTON

  鼠标中

  您永远都不会从键盘讯息中获得这些鼠标键代码。VK_CANCEL代码是一个虚拟键码,它包括同时按下两个键(Ctrl-Break)。Windows应用程序通常不使用此键。

  表2中的键--Backspace、Tab、Enter、Esc和空格--通常用于Windo研风化ws程序。不过,Windows一般用字元讯息(而不是键盘讯息)来处理这些键。

  表2

  十进制

  十六进制

  winuser.h识别字

  IB孙也或阿M相容键盘对应键

  8

  0x08

  VK_BACK

  B我月划采倒流京油子端ackspace

  9

  0x09

  VK_TAB

  Tab

  12

  0x0C

  VK_CLEAR

  NumLock关闭时的位假染数挥书试数字键盘5

  13

  0x0D

  VK_RETUR倒永边课N

  Enter

  16

  0x10

  VK_SHIFT

  Shift

意乙标今凯是  17

  0x11

  VK_CONTROL

 势之实便掌情酸原厚 Ctrl

  18

  0x毫居马染督游12

  VK_MENU

  Alt

  19

  0x13

  VK_PAUSE

  P额防级费了理江ause

  20

 杆汽 0x14

  VK_CAPITAL

  Caps Lock

  2图拿7

  0x1B

  VK_E队易封胞管措局齐SCAPE

  Esc

  32

  0x20

  VK_SPACE

  空格

  另外,Windows程序通常不需要监视Shift、Ctrl或Alt键的状态。

  表3列出的前八个码可能是与VK_INSERT和VK_DELETE一起最常用的虚拟键码:

  表3

  十进制

  十六进制

  winuser.h识别字

  IBM相容键盘对应键

  33

  0x21

  VK_PRIOR

  Page Up

  34

  0x22

  VK_NEXT

  Page Down

  35

  0x23

  VK_END

  End

  36

  0x24

  VK_HOME

  Home

  37

  0x25

  VK_LEFT

  左箭头

  38

  0x26

  VK_UP

  上箭头

  39

  0x27

  VK_RIGHT

  右箭头

  40

  0x28

  VK_DOWN

  下箭头

  41

  0x29

  VK_SELECT


  42

  0x2A

  VK_PRINT


  43

  0x2B

  VK_EXECUTE


  44

  0x2C

  VK_SNAPSHOT

  Print Screen

  45

  0x2D

  VK_INSERT

  Insert

  46

  0x2E

  VK_DELETE

  Delete

  47

  0x2F

  VK_HELP


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

  表4

  十进制

  十六进制

  WINUSER.H识别字

  IBM相容键盘

  48-57

  30-39

  无

  主键盘上的0到9

  65-90

  41-5A

  无

  A到Z

  注意,数字和字母的虚拟键码是ASCII码。Windows程序几乎从不使用这些虚拟键码;实际上,程序使用的是ASCII码字元的字元讯息。

  表5所示的代码是由Microsoft Natural Keyboard及其相容键盘产生的:

  表5

  十进制

  十六进制

  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所示的代码用于小键盘上的键(如果有的话):

  表6

  十进制

  十六进制

  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个。另外,程式通常用功能键作为键盘加速键,这样,它们通常不处理表7所示的按键:

  表7

  十进制

  十六进制

  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

  鼠标后退键

  VK_XBUTTON2

  6

  鼠标前进键

  VK_BACK

  8

  Backspace

  VK_TAB

  9

  Tab

  VK_CLEAR

  12

  Clear

  VK_RETURN

  13

  Enter

  VK_SHIFT

  16

  Shift

  VK_CONTROL

  17

  Ctrl

  VK_MENU

  18

  Alt

  VK_PAUSE

  19

  Pause

  VK_CAPITAL

  20

  Caps Lock

  VK_KANA

  21


  VK_HANGUL

  21


  VK_JUNJA

  23


  VK_FINAL

  24


  VK_HANJA

  25


  VK_KANJI

  25*


  VK_ESCAPE

  27

  Esc

  VK_CONVERT

  28


  VK_NONCONVERT

  29


  VK_ACCEPT

  30


  VK_MODECHANGE

  31


  VK_SPACE

  32

  Space

  VK_PRIOR

  33

  Page Up

  VK_NEXT

  34

  Page Down

  VK_END

  35

  End

  VK_HOME

  36

  Home

  VK_LEFT

  37

  Left Arrow

  VK_UP

  38

  Up Arrow

  VK_RIGHT

  39

  Right Arrow

  VK_DOWN

  40

  Down Arrow

  VK_SELECT

  41

  Select

  VK_PRINT

  42

  Print

  VK_EXECUTE

  43

  Execute

  VK_SNAPSHOT

  44

  Snapshot

  VK_INSERT

  45

  Insert

  VK_DELETE

  46

  Delete

  VK_HELP

  47

  Help


  48

  0


  49

  1


  50

  2


  51

  3


  52

  4


  53

  5


  54

  6


  55

  7


  56

  8


  57

  9


  65

  A


  66

  B


  67

  C


  68

  D


  69

  E


  70

  F


  71

  G


  72

  H


  73

  I


  74

  J


  75

  K


  76

  L


  77

  M


  78

  N


  79

  O


  80

  P


  81

  Q


  82

  R


  83

  S


  84

  T


  85

  U


  86

  V


  87

  W


  88

  X


  89

  Y


  90

  Z

  VK_LWIN

  91

  左WIN键

  VK_RWIN

  92

  右WIN键

  VK_APPS

  93

  应用程序键

  VK_SLEEP

  95

  睡眠键

  VK_NUMPAD0

  96

  小键盘 0

  VK_NUMPAD1

  97

  小键盘 1

  VK_NUMPAD2

  98

  小键盘 2

  VK_NUMPAD3

  99

  小键盘 3

  VK_NUMPAD4

  100

  小键盘 4

  VK_NUMPAD5

  101

  小键盘 5

  VK_NUMPAD6

  102

  小键盘 6

  VK_NUMPAD7

  103

  小键盘 7

  VK_NUMPAD8

  104

  小键盘 8

  VK_NUMPAD9

  105

  小键盘 9

  VK_MULTIPLY

  106

  小键盘 *

  VK_ADD

  107

  小键盘 +

  VK_SEPARATOR

  108

  小键盘 Enter

  VK_SUBTRACT

  109

  小键盘 -

  VK_DECIMAL

  110

  小键盘 .

  VK_DIVIDE

  111

  小键盘 /

  VK_F1

  112

  F1

  VK_F2

  113

  F2

  VK_F3

  114

  F3

  VK_F4

  115

  F4

  VK_F5

  116

  F5

  VK_F6

  117

  F6

  VK_F7

  118

  F7

  VK_F8

  119

  F8

  VK_F9

  120

  F9

  VK_F10

  121

  F10

  VK_F11

  122

  F11

  VK_F12

  123

  F12

  VK_F13

  124


  VK_F14

  125


  VK_F15

  126


  VK_F16

  127


  VK_F17

  128


  VK_F18

  129


  VK_F19

  130


  VK_F20

  131


  VK_F21

  132


  VK_F22

  133


  VK_F23

  134


  VK_F24

  135


  VK_NUMLOCK

  144

  Num Lock

  VK_SCROLL

  145

  Scroll

  VK_LSHIFT

  160

  左shift

  VK_RSHIFT

  161

  右shift

  VK_LCONTROL

  162


  VK_RCONTROL

  163


  VK_LMENU

  164


  VK_RMENU

  165


  VK_BROWSER_BACK

  166


  VK_BROWSER_FORWARD

  167


  VK_BROWSER_REFRESH

  168


  VK_BROWSER_STOP

  169


  VK_BROWSER_SEARCH

  170


  VK_BROWSER_FAVORITES

  171


  VK_BROWSER_HOME

  172


  VK_VOLUME_MUTE

  173

  VolumeMute

  VK_VOLUME_DOWN

  174

  VolumeDown

  VK_VOLUME_UP

  175

  VolumeUp

  VK_MEDIA_NEXT_TRACK

  176


  VK_MEDIA_PREV_TRACK

  177


  VK_MEDIA_STOP

  178


  VK_MEDIA_PLAY_PAUSE

  179


  VK_LAUNCH_MAIL

  180


  VK_LAUNCH_MEDIA_SELECT

  181


  VK_LAUNCH_APP1

  182


  VK_LAUNCH_APP2

  183


  VK_OEM_1

  186

  ; :

  VK_OEM_PLUS

  187

  = +

  VK_OEM_COMMA

  188

  ,

  VK_OEM_MINUS

  189

  - _

  VK_OEM_PERIOD

  190

  .

  VK_OEM_2

  191

  / ?

  VK_OEM_3

  192

  ` ~

  VK_OEM_4

  219

  [ {

  VK_OEM_5

  220

  \\ |

  VK_OEM_6

  221

  ] }

  VK_OEM_7

  222

  ' "

  VK_OEM_8

  223


  VK_OEM_102

  226


  VK_PACKET

  231


  VK_PROCESSKEY

  229


  VK_ATTN

  246


  VK_CRSEL

  247


  VK_EXSEL

  248


  VK_EREOF

  249


  VK_PLAY

  250


  VK_ZOOM

  251


  VK_NONAME

  252


  VK_PA1

  253


  VK_OEM_CLEAR

  254


键盘的扫描码、虚拟码:

  当用户按下某个键时,

  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.

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信
上一篇:徐大椿
下一篇:天窗穴

相关文章