|
虛擬鍵碼保存在 WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN 和 WM_SYSKEYUP 消息的 wParam 參數(shù)中。此代碼標(biāo)識(shí)按下或釋放的鍵。 哈,又是「虛擬」,您喜歡這個(gè)詞嗎?虛擬指的是假定存在于思想中而不是現(xiàn)實(shí)世界中的一些事物,也只有熟練使用 DOS 匯編語言編寫應(yīng)用程序的程序?qū)懽髡卟庞锌赡苤赋?,為什么?Windows 鍵盤處理如此基本的鍵碼是虛擬的而不是真實(shí)的。 對于早期的程序?qū)懽髡邅碚f,真實(shí)的鍵碼由實(shí)際鍵盤硬件產(chǎn)生。在 Windows 文件中將這些鍵碼稱為「掃描碼 (scan codes)」。在 IBM 兼容機(jī)種上,掃描碼 16 是 Q 鍵,17 是 W 鍵,18 是 E、19 是 R,20 是 T,21 是 Y 等等。這時(shí)您會(huì)發(fā)現(xiàn),掃描碼是依據(jù)鍵盤的實(shí)際布局的。Windows 開發(fā)者認(rèn)為這些代碼過于與設(shè)備相關(guān)了,于是他們試圖通過定義所謂的虛擬鍵碼,以便經(jīng)由與設(shè)備無關(guān)的方式處理鍵盤。其中一些虛擬鍵碼不能在 IBM 兼容機(jī)種上產(chǎn)生,但可能會(huì)在其它制造商生產(chǎn)的鍵盤中找到,或者在未來的鍵盤上找到。 您使用的大多數(shù)虛擬鍵碼的名稱在 WINUSER.H 表頭文件中都定義為以 VK_開頭。表 6-2 列出了這些名稱和數(shù)值(十進(jìn)制和十六進(jìn)制),以及與虛擬鍵相對應(yīng)的 IBM 兼容機(jī)種鍵盤上的鍵。下表也標(biāo)出了 Windows 執(zhí)行時(shí)是否需要這些鍵。下表還按數(shù)字順序列出了虛擬鍵碼。 前四個(gè)虛擬鍵碼中有三個(gè)指的是鼠標(biāo)鍵:
您永遠(yuǎn)都不會(huì)從鍵盤消息中獲得這些鼠標(biāo)鍵代碼。在下一章可以看到,我們能夠從鼠標(biāo)消息中獲得它們。VK_CANCEL 代碼是一個(gè)虛擬鍵碼,它包括同時(shí)按下兩個(gè)鍵 (Ctrl-Break)。Windows 應(yīng)用程序通常不使用此鍵。 表 6-3 中的鍵 --Backspace、Tab、Enter、Escape 和 Spacebar-通常用于 Windows 程序。不過,Windows 一般用字符消息(而不是鍵盤消息)來處理這些鍵。
另外,Windows 程序通常不需要監(jiān)視 Shift、Ctrl 或 Alt 鍵的狀態(tài)。 表 6-4 列出的前八個(gè)碼可能是與 VK_INSERT 和 VK_DELETE 一起最常用的虛擬鍵碼:
注意,許多名稱(例如 VK_PRIOR 和 VK_NEXT)都與鍵上的標(biāo)志不同,而且也與滾動(dòng)條中的標(biāo)識(shí)符不統(tǒng)一。Print Screen 鍵在平時(shí)都被 Windows 應(yīng)用程序所忽略。Windows 本身響應(yīng)此鍵時(shí)會(huì)將視訊顯示的位圖影本存放到剪貼板中。假使有鍵盤提供了 VK_SELECT、VK_PRINT、VK_EXECUTE 和 VK_HELP,大概也沒幾個(gè)人看過那樣的鍵盤。 Windows 也包括在主鍵盤上的字母和數(shù)字鍵的虛擬鍵碼(數(shù)字鍵盤將單獨(dú)處理)。
注意,數(shù)字和字母的虛擬鍵碼是 ASCII 碼。Windows 程序幾乎從不使用這些虛擬鍵碼;實(shí)際上,程序使用的是 ASCII 碼字符的字符消息。 表 6-6 所示的代碼是由 Microsoft Natural Keyboard 及其兼容鍵盤產(chǎn)生的:
Windows 用 VK_LWIN 和 VK_RWIN 鍵打開「開始」菜單或者(在以前的版本中)啟動(dòng)「工作管理員程序」。這兩個(gè)都可以用于登錄或注銷 Windows(只在 Microsoft Windows NT 中有效),或者登錄或注銷網(wǎng)絡(luò)(在 Windows for Applications 中)。應(yīng)用程序能夠通過顯示輔助信息或者當(dāng)成快捷方式鍵看待來處理 application 鍵。 表 6-7 所示的代碼用于數(shù)字鍵盤上的鍵(如果有的話):
最后,雖然多數(shù)的鍵盤都有 12 個(gè)功能鍵,但 Windows 只需要 10 個(gè),而位旗標(biāo)卻有 24 個(gè)。另外,程序通常用功能鍵作為鍵盤快捷鍵,這樣,它們通常不處理表 6-8 所示的按鍵:
另外,還定義了一些其它虛擬鍵碼,但它們只用于非標(biāo)準(zhǔn)鍵盤上的鍵,或者通常在大型主機(jī)終端機(jī)上使用的鍵。查看 / Platform SDK / User Interface Services / User Input / Virtual-Key Codes,可得到完整的列表。 |
|
|