Windows按鍵消息—虛擬鍵碼(轉)


源地址:http://c.biancheng.net/cpp/html/1253.html

 

虛擬鍵碼保存在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,可得到完整的列表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM