虛拟鍵碼

虛拟鍵碼

虛拟鍵碼
虛拟鍵碼保存在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

1

VK_LBUTTON

滑鼠左鍵

2

2

VK_RBUTTON

滑鼠右鍵

3

3

VK_CANCEL

Ctrl-Break

4

4

VK_MBUTTON

滑鼠中鍵

您永遠都不會從鍵盤訊息中獲得這些滑鼠鍵代碼。在下一章可以看到,我們能夠從滑鼠訊息中獲得它們。VK_CANCEL代碼是一個虛拟鍵碼,它包括同時按下兩個鍵(Ctrl-Break)。Windows應用程式通常不使用此鍵。

表6-3中的鍵--Backspace、Tab、Enter、Escape和Spacebar-通常用於Windows程式。不過,Windows一般用字元訊息(而不是鍵盤訊息)來處理這些鍵。

表6-3

十進位 十六進位 WINUSER.H識别字 必需? IBM相容鍵盤

十進制

十六進制

WINUSER.H識别字

IBM相容鍵盤

8

8

VK_BACK

Backspace

9

9

VK_TAB

Tab

12

0C

VK_CLEAR

Lock關閉時的數字鍵盤5

13

0D

VK_RETURN

Enter

16

10

VK_SHIFT

Shift

展開表格

另外,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

左箭頭

展開表格

注意,許多名稱(例如VK_PRIORWindows也包括在主鍵盤上的字母和數位鍵的虛拟鍵碼(數字鍵盤将單獨處理)。

十進位 十六進位 WINUSER.H識别字 必需? IBM相容鍵盤

十進制

十六進制

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鍵

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

數字鍵盤上的-

展開表格

最後,雖然多數的鍵盤都有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

展開表格

二維碼介紹

當用戶按下某個鍵時,

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.

相關詞條

相關搜索

其它詞條