虛擬指的是假定存在於思想中而不是現實世界中的壹些事物,也只有熟練使用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,可得到完整的列表。
虛擬鍵表
虛擬鍵與ASCII碼對應的有: '1'-'9','A'-'Z'
vkkeyscan()函數可查看相應字符的實數值.參數為字符;
API常量型 實數值 解釋
VK_LBUTTON 1 滑鼠左鍵
VK_RBUTTON 2 滑鼠右鍵
VK_CANCEL 3 Ctrl+Break
VK_MBUTTON 4 滑鼠中鍵
VK_BACK 8 退格
VK_TAB 9 TAB
VK_CLEAR 12 NUM LOCK關閉時的數字鍵盤5?
VK_RETURN 13 回車
VK_SHIFT 16 Shift
VK_CONTROL 17 Ctrl
VK_MENU 18 Alt
VK_PAUSE 19 Pause Break
VK_CAPITAL 20 Caps Lock
VK_ESCAPE 27 ESC
VK_SPACE 32 空格鍵
VK_PRIOR 33 Page up
VK_NEXT 34 Page down
VK_END 35 End
VK_HOME 36 Home
VK_LEFT 37 左箭頭
VK_RIGHT 38 上箭頭
VK_UP 39 右箭頭
VK_DOWN 40 下箭頭
VK_SELECT 41
VK_PRINT 42
VK_EXECUTE 43
VK_SNAPSHOT 44 Print Screen
VK_INSERT 45 Insert
VK_DELETE 46 Delete
VK_HELP 47
VK_0..9 48..57 主鍵盤0..9
VK_A..Z 65..90 主鍵盤A..Z
VK_LWIN 91 左Win
VK_RWIN 92 右Win
VK_APPS 93 快捷菜單
Reserved 94 保留
VK_SLEEP 95 Sleep
數字鍵盤
VK_NUMPAD0..9 96..105 小鍵盤上的0到9
VK_MULTIPLY 106 小鍵盤上的*
VK_ADD 107 小鍵盤上的+
VK_SEPARATOR 108 分隔符
VK_SUBTRACT 109 小鍵盤上的-
VK_DECIMAL 110 小鍵盤上的.
VK_DIVIDE 111 小鍵盤上的/
VK_NUMLOCK 144 Num Lock
VK_F1..VK_F24 112..135 F1..24
Unassigned 136..145 未定義
VK_SCROLL 145 Scroll Lock
Specific 146..150 特殊用途
Unassigned 151..159 未定義
VK_LSHIFT 160 左Shift鍵
VK_RSHIFT 161 右Shift鍵
VK_LCONTROL 162 左Ctrl鍵
VK_RCONTROL 163 右Ctrl鍵
VK_LMENU 164 左Alt鍵
VK_RMENU 165 右Alt鍵
瀏覽器
VK_BROWSER_BACK A6(166) Browser Back key
VK_BROWSER_FORWARD A7(167) Browser Forward key
VK_BROWSER_REFRESH A8(168) Browser Refresh key
VK_BROWSER_STOP A9(169) Browser Stop key
VK_BROWSER_SEARCH AA(170) Browser Search key
VK_BROWSER_FAVORITES AB(171) Browser Favorites key
VK_BROWSER_HOME AC(172) Browser Start and Home key
音量
VK_VOLUME_MUTE AD Volume Mute key
VK_VOLUME_DOWN AE Volume Down key
VK_VOLUME_UP AF Volume Up key
媒體
VK_MEDIA_NEXT_TRACK B0 Next Track key
VK_MEDIA_PREV_TRACK B1 Previous Track key
VK_MEDIA_STOP B2 Stop Media key
VK_MEDIA_PLAY_PAUSE B3 Play/Pause Media key
語言
VK_LAUNCH_MAIL B4 Start Mail key
VK_LAUNCH_MEDIA_SELECT B5 Select Media key
VK_LAUNCH_APP1 B6 Start Application 1 key
VK_LAUNCH_APP2 B7 Start Application 2 key
標點
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 ~
Reserved 193..215 保留碼
Unassined 216..218 未指定
VK_OEM_4 219 [
VK_OEM_5 220 \
VK_OEM_6 221 ]
VK_OEM_7 222 引號
VK_OEM_8 223
VK_ATTN HF6(246)
VK_CRSEL HF7(247)
VK_EXSEL HF8(248)
VK_EREOF HF9(249)
VK_PLAY HFA(250)
VK_ZOOM HFB(251)
VK_NONAME HFC(252)
VK_PA1 HFD(253)