请输入您要查询的百科知识:

 

词条 虚拟键码
释义

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

虚拟键表

虚拟键码 对应值  对应键

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 

VK_RWIN 92 

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 

VK_RSHIFT 161 

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

完整的虚拟键码表

VK_LBUTTON (01)

Left mouse button

VK_RBUTTON (02)

Right mouse button

VK_CANCEL (03)

Control-break processing

VK_MBUTTON (04)

Middle mouse button (three-button mouse)

VK_XBUTTON1 (05)

Windows 2000/XP: X1 mouse button

VK_XBUTTON2 (06)

Windows 2000/XP: X2 mouse button

- (07)

Undefined

VK_BACK (08)

BACKSPACE key

VK_TAB (09)

TAB key

- (0A-0B)

Reserved

VK_CLEAR (0C)

CLEAR key

VK_RETURN (0D)

ENTER key

- (0E-0F)

Undefined

VK_SHIFT (10)

SHIFT key

VK_CONTROL (11)

CTRL key

VK_MENU (12)

ALT key

VK_PAUSE (13)

PAUSE key

VK_CAPITAL (14)

CAPS LOCK key

VK_KANA (15)

Input Method Editor (IME) Kana mode

VK_HANGUEL (15)

IME Hanguel mode (maintained for compatibility; use VK_HANGUL)

VK_HANGUL (15)

IME Hangul mode

- (16)

Undefined

VK_JUNJA (17)

IME Junja mode

VK_FINAL (18)

IME final mode

VK_HANJA (19)

IME Hanja mode

VK_KANJI (19)

IME Kanji mode

- (1A)

Undefined

VK_ESCAPE (1B)

ESC key

VK_CONVERT (1C)

IME convert

VK_NONCONVERT (1D)

IME nonconvert

VK_ACCEPT (1E)

IME accept

VK_MODECHANGE (1F)

IME mode change request

VK_SPACE (20)

SPACEBAR

VK_PRIOR (21)

PAGE UP key

VK_NEXT (22)

PAGE DOWN key

VK_END (23)

END key

VK_HOME (24)

HOME key

VK_LEFT (25)

LEFT ARROW key

VK_UP (26)

UP ARROW key

VK_RIGHT (27)

RIGHT ARROW key

VK_DOWN (28)

DOWN ARROW key

VK_SELECT (29)

SELECT key

VK_PRINT (2A)

PRINT key

VK_EXECUTE (2B)

EXECUTE key

VK_SNAPSHOT (2C)

PRINT SCREEN key

VK_INSERT (2D)

INS key

VK_DELETE (2E)

DEL key

VK_HELP (2F)

HELP key

(30)

0 key

(31)

1 key

(32)

2 key

(33)

3 key

(34)

4 key

(35)

5 key

(36)

6 key

(37)

7 key

(38)

8 key

(39)

9 key

- (3A-40)

Undefined

(41)

A key

(42)

B key

(43)

C key

(44)

D key

(45)

E key

(46)

F key

(47)

G key

(48)

H key

(49)

I key

(4A)

J key

(4B)

K key

(4C)

L key

(4D)

M key

(4E)

N key

(4F)

O key

(50)

P key

(51)

Q key

(52)

R key

(53)

S key

(54)

T key

(55)

U key

(56)

V key

(57)

W key

(58)

X key

(59)

Y key

(5A)

Z key

VK_LWIN (5B)

Left Windows key (Microsoft Natural keyboard)

VK_RWIN (5C)

Right Windows key (Natural keyboard)

VK_APPS (5D)

Applications key (Natural keyboard)

- (5E)

Reserved

VK_SLEEP (5F)

Computer Sleep key

VK_NUMPAD0 (60)

Numeric keypad 0 key

VK_NUMPAD1 (61)

Numeric keypad 1 key

VK_NUMPAD2 (62)

Numeric keypad 2 key

VK_NUMPAD3 (63)

Numeric keypad 3 key

VK_NUMPAD4 (64)

Numeric keypad 4 key

VK_NUMPAD5 (65)

Numeric keypad 5 key

VK_NUMPAD6 (66)

Numeric keypad 6 key

VK_NUMPAD7 (67)

Numeric keypad 7 key

VK_NUMPAD8 (68)

Numeric keypad 8 key

VK_NUMPAD9 (69)

Numeric keypad 9 key

VK_MULTIPLY (6A)

Multiply key

VK_ADD (6B)

Add key

VK_SEPARATOR (6C)

Separator key

VK_SUBTRACT (6D)

Subtract key

VK_DECIMAL (6E)

Decimal key

VK_DIVIDE (6F)

Divide key

VK_F1 (70)

F1 key

VK_F2 (71)

F2 key

VK_F3 (72)

F3 key

VK_F4 (73)

F4 key

VK_F5 (74)

F5 key

VK_F6 (75)

F6 key

VK_F7 (76)

F7 key

VK_F8 (77)

F8 key

VK_F9 (78)

F9 key

VK_F10 (79)

F10 key

VK_F11 (7A)

F11 key

VK_F12 (7B)

F12 key

VK_F13 (7C)

F13 key

VK_F14 (7D)

F14 key

VK_F15 (7E)

F15 key

VK_F16 (7F)

F16 key

VK_F17 (80H)

F17 key

VK_F18 (81H)

F18 key

VK_F19 (82H)

F19 key

VK_F20 (83H)

F20 key

VK_F21 (84H)

F21 key

VK_F22 (85H)

F22 key

VK_F23 (86H)

F23 key

VK_F24 (87H)

F24 key

- (88-8F)

Unassigned

VK_NUMLOCK (90)

NUM LOCK key

VK_SCROLL (91)

SCROLL LOCK key

(92-96)

OEM specific

- (97-9F)

Unassigned

VK_LSHIFT (A0)

Left SHIFT key

VK_RSHIFT (A1)

Right SHIFT key

VK_LCONTROL (A2)

Left CONTROL key

VK_RCONTROL (A3)

Right CONTROL key

VK_LMENU (A4)

Left MENU key

VK_RMENU (A5)

Right MENU key

VK_BROWSER_BACK (A6)

Windows 2000/XP: Browser Back key

VK_BROWSER_FORWARD (A7)

Windows 2000/XP: Browser Forward key

VK_BROWSER_REFRESH (A8)

Windows 2000/XP: Browser Refresh key

VK_BROWSER_STOP (A9)

Windows 2000/XP: Browser Stop key

VK_BROWSER_SEARCH (AA)

Windows 2000/XP: Browser Search key

VK_BROWSER_FAVORITES (AB)

Windows 2000/XP: Browser Favorites key

VK_BROWSER_HOME (AC)

Windows 2000/XP: Browser Start and Home key

VK_VOLUME_MUTE (AD)

Windows 2000/XP: Volume Mute key

VK_VOLUME_DOWN (AE)

Windows 2000/XP: Volume Down key

VK_VOLUME_UP (AF)

Windows 2000/XP: Volume Up key

VK_MEDIA_NEXT_TRACK (B0)

Windows 2000/XP: Next Track key

VK_MEDIA_PREV_TRACK (B1)

Windows 2000/XP: Previous Track key

VK_MEDIA_STOP (B2)

Windows 2000/XP: Stop Media key

VK_MEDIA_PLAY_PAUSE (B3)

Windows 2000/XP: Play/Pause Media key

VK_LAUNCH_MAIL (B4)

Windows 2000/XP: Start Mail key

VK_LAUNCH_MEDIA_SELECT (B5)

Windows 2000/XP: Select Media key

VK_LAUNCH_APP1 (B6)

Windows 2000/XP: Start Application 1 key

VK_LAUNCH_APP2 (B7)

Windows 2000/XP: Start Application 2 key

- (B8-B9)

Reserved

VK_OEM_1 (BA)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the ';:' key

VK_OEM_PLUS (BB)

Windows 2000/XP: For any country/region, the '+' key

VK_OEM_COMMA (BC)

Windows 2000/XP: For any country/region, the ',' key

VK_OEM_MINUS (BD)

Windows 2000/XP: For any country/region, the '-' key

VK_OEM_PERIOD (BE)

Windows 2000/XP: For any country/region, the '.' key

VK_OEM_2 (BF)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the '/?' key

VK_OEM_3 (C0)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the '`~' key

- (C1-D7)

Reserved

- (D8-DA)

Unassigned

VK_OEM_4 (DB)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the '[{' key

VK_OEM_5 (DC)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the '\\|' key

VK_OEM_6 (DD)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the ']}' key

VK_OEM_7 (DE)

Used for miscellaneous characters; it can vary by keyboard.

Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key

VK_OEM_8 (DF)

Used for miscellaneous characters; it can vary by keyboard.

- (E0)

Reserved

(E1)

OEM specific

VK_OEM_102 (E2)

Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard

(E3-E4)

OEM specific

VK_PROCESSKEY (E5)

Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key

(E6)

OEM specific

VK_PACKET (E7)

Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP

- (E8)

Unassigned

(E9-F5)

OEM specific

VK_ATTN (F6)

Attn key

VK_CRSEL (F7)

CrSel key

VK_EXSEL (F8)

ExSel key

VK_EREOF (F9)

Erase EOF key

VK_PLAY (FA)

Play key

VK_ZOOM (FB)

Zoom key

VK_NONAME (FC)

Reserved

VK_PA1 (FD)

PA1 key

VK_OEM_CLEAR (FE)

Clear key

键盘的扫描码、虚拟码

当用户按下某个键时,

' 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.

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/10 21:04:08