虛擬鍵碼保存在 WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN 和 WM_SYSKEYUP 消息的 wParam 參數(shù)中。此代碼標(biāo)識(shí)按下或釋放的鍵。
哈,又是「虛擬」,您喜歡這個(gè)詞嗎?虛擬指的是假定存在于思想中而不是現(xiàn)實(shí)世界中的一些事物,也只有熟練使用 DOS 匯編語(yǔ)言編寫(xiě)應(yīng)用程序的程序?qū)懽髡卟庞锌赡苤赋?,為什么?duì) Windows 鍵盤(pán)處理如此基本的鍵碼是虛擬的而不是真實(shí)的。
對(duì)于早期的程序?qū)懽髡邅?lái)說(shuō),真實(shí)的鍵碼由實(shí)際鍵盤(pán)硬件產(chǎn)生。在 Windows 文件中將這些鍵碼稱(chēng)為「掃描碼 (scan codes)」。在 IBM 兼容機(jī)種上,掃描碼 16 是 Q 鍵,17 是 W 鍵,18 是 E、19 是 R,20 是 T,21 是 Y 等等。這時(shí)您會(huì)發(fā)現(xiàn),掃描碼是依據(jù)鍵盤(pán)的實(shí)際布局的。Windows 開(kāi)發(fā)者認(rèn)為這些代碼過(guò)于與設(shè)備相關(guān)了,于是他們?cè)噲D通過(guò)定義所謂的虛擬鍵碼,以便經(jīng)由與設(shè)備無(wú)關(guān)的方式處理鍵盤(pán)。其中一些虛擬鍵碼不能在 IBM 兼容機(jī)種上產(chǎn)生,但可能會(huì)在其它制造商生產(chǎn)的鍵盤(pán)中找到,或者在未來(lái)的鍵盤(pán)上找到。
您使用的大多數(shù)虛擬鍵碼的名稱(chēng)在 WINUSER.H 表頭文件中都定義為以 VK_開(kāi)頭。表 6-2 列出了這些名稱(chēng)和數(shù)值(十進(jìn)制和十六進(jìn)制),以及與虛擬鍵相對(duì)應(yīng)的 IBM 兼容機(jī)種鍵盤(pán)上的鍵。下表也標(biāo)出了 Windows 執(zhí)行時(shí)是否需要這些鍵。下表還按數(shù)字順序列出了虛擬鍵碼。
前四個(gè)虛擬鍵碼中有三個(gè)指的是鼠標(biāo)鍵:
表 6-2 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
1 | 01 | VK_LBUTTON | 鼠標(biāo)左鍵 | |
2 | 02 | VK_RBUTTON | 鼠標(biāo)右鍵 | |
3 | 03 | VK_CANCEL | ˇ | Ctrl-Break |
4 | 04 | VK_MBUTTON | 鼠標(biāo)中鍵 |
您永遠(yuǎn)都不會(huì)從鍵盤(pán)消息中獲得這些鼠標(biāo)鍵代碼。在下一章可以看到,我們能夠從鼠標(biāo)消息中獲得它們。VK_CANCEL 代碼是一個(gè)虛擬鍵碼,它包括同時(shí)按下兩個(gè)鍵 (Ctrl-Break)。Windows 應(yīng)用程序通常不使用此鍵。
表 6-3 中的鍵 --Backspace、Tab、Enter、Escape 和 Spacebar-通常用于 Windows 程序。不過(guò),Windows 一般用字符消息(而不是鍵盤(pán)消息)來(lái)處理這些鍵。
表 6-3 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
8 | 08 | VK_BACK | ˇ | Backspace |
9 | 09 | VK_TAB | ˇ | Tab |
12 | 0C | VK_CLEAR | Num Lock 關(guān)閉時(shí)的數(shù)字鍵盤(pán) 5 | |
13 | 0D | VK_RETURN | ˇ | Enter (或者另一個(gè)) |
16 | 10 | VK_SHIFT | ˇ | Shift (或者另一個(gè)) |
17 | 11 | VK_CONTROL | ˇ | Ctrl (或者另一個(gè)) |
18 | 12 | VK_MENU | ˇ | Alt (或者另一個(gè)) |
19 | 13 | VK_PAUSE | Pause | |
20 | 14 | VK_CAPITAL | ˇ | Caps Lock |
27 | 1B | VK_ESCAPE | ˇ | Esc |
32 | 20 | VK_SPACE | ˇ | Spacebar |
另外,Windows 程序通常不需要監(jiān)視 Shift、Ctrl 或 Alt 鍵的狀態(tài)。
表 6-4 列出的前八個(gè)碼可能是與 VK_INSERT 和 VK_DELETE 一起最常用的虛擬鍵碼:
表 6-4 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
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 |
注意,許多名稱(chēng)(例如 VK_PRIOR 和 VK_NEXT)都與鍵上的標(biāo)志不同,而且也與滾動(dòng)條中的標(biāo)識(shí)符不統(tǒng)一。Print Screen 鍵在平時(shí)都被 Windows 應(yīng)用程序所忽略。Windows 本身響應(yīng)此鍵時(shí)會(huì)將視訊顯示的位圖影本存放到剪貼板中。假使有鍵盤(pán)提供了 VK_SELECT、VK_PRINT、VK_EXECUTE 和 VK_HELP,大概也沒(méi)幾個(gè)人看過(guò)那樣的鍵盤(pán)。
Windows 也包括在主鍵盤(pán)上的字母和數(shù)字鍵的虛擬鍵碼(數(shù)字鍵盤(pán)將單獨(dú)處理)。
表 6-5 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
48-57 | 30-39 | 無(wú) | ˇ | 主鍵盤(pán)上的 0 到 9 |
65-90 | 41-5A | 無(wú) | ˇ | A 到 Z |
注意,數(shù)字和字母的虛擬鍵碼是 ASCII 碼。Windows 程序幾乎從不使用這些虛擬鍵碼;實(shí)際上,程序使用的是 ASCII 碼字符的字符消息。
表 6-6 所示的代碼是由 Microsoft Natural Keyboard 及其兼容鍵盤(pán)產(chǎn)生的:
表 6-6 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
91 | 5B | VK_LWIN | 左 Windows 鍵 | |
92 | 5C | VK_RWIN | 右 Windows 鍵 | |
93 | 5D | VK_APPS | Applications 鍵 |
Windows 用 VK_LWIN 和 VK_RWIN 鍵打開(kāi)「開(kāi)始」菜單或者(在以前的版本中)啟動(dòng)「工作管理員程序」。這兩個(gè)都可以用于登錄或注銷(xiāo) Windows(只在 Microsoft Windows NT 中有效),或者登錄或注銷(xiāo)網(wǎng)絡(luò)(在 Windows for Applications 中)。應(yīng)用程序能夠通過(guò)顯示輔助信息或者當(dāng)成快捷方式鍵看待來(lái)處理 application 鍵。
表 6-7 所示的代碼用于數(shù)字鍵盤(pán)上的鍵(如果有的話):
表 6-7 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
96-105 | 60-69 | VK_NUMPAD0 到 VK_ NUMPAD9 | NumLock 打開(kāi)時(shí)數(shù)字鍵盤(pán)上的 0 到 9 | |
106 | 6A | VK_MULTIPLY | 數(shù)字鍵盤(pán)上的 * | |
107 | 6B | VK_ADD | 數(shù)字鍵盤(pán)上的 + | |
108 | 6C | VK_SEPARATOR | ||
109 | 6D | VK_SUBTRACT | 數(shù)字鍵盤(pán)上的 - | |
110 | 6E | VK_DECIMAL | 數(shù)字鍵盤(pán)上的. | |
111 | 6F | VK_DIVIDE | 數(shù)字鍵盤(pán)上的 / |
最后,雖然多數(shù)的鍵盤(pán)都有 12 個(gè)功能鍵,但 Windows 只需要 10 個(gè),而位旗標(biāo)卻有 24 個(gè)。另外,程序通常用功能鍵作為鍵盤(pán)快捷鍵,這樣,它們通常不處理表 6-8 所示的按鍵:
表 6-8 |
十進(jìn)制 | 十六進(jìn)制 | WINUSER.H 標(biāo)識(shí)符 | 必需? | IBM 兼容鍵盤(pán) |
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 |
另外,還定義了一些其它虛擬鍵碼,但它們只用于非標(biāo)準(zhǔn)鍵盤(pán)上的鍵,或者通常在大型主機(jī)終端機(jī)上使用的鍵。查看 / Platform SDK / User Interface Services / User Input / Virtual-Key Codes,可得到完整的列表。
聯(lián)系客服