系统消息 -- 键鼠消息
来源:互联网 发布:mac运行iphone应用 编辑:程序博客网 时间:2024/06/11 09:10
转自:点击打开链接
鼠标消息
在窗口显示区域鼠标消息
WM_MOUSEMOVE
当鼠标在窗口的显示区域移动时
WM_LBUTTONDOWN
按下鼠标左键
WM_LBUTTONUP
释放鼠标左键
WM_LBUTTONDBLCLK
双击鼠标左键
WM_MBUTTONDOWN
按下鼠标中键
WM_MBUTTONUP
释放鼠标中键
WM_MBUTTONDBLCLK
双击鼠标中键
WM_RBUTTONDOWN
按下鼠标右键
WM_RBUTTONUP
释放鼠标右键
WM_RBUTTONDBLCLK
双击鼠标右键
wParam为鼠标按键以及Shift和Ctrl键的状态
lParam为鼠标的显示区域x坐标y坐标(高字节为x,低字节为y)
WM_NCHITTEST
鼠标命中测试
Windows根据它来产生与鼠标位置相关的所有其它鼠标消息
wParam unused
lParam 屏幕坐标x,y
WM_MOUSEWHEEL
鼠标滚轮转动
wParam的低字组包含一系列的旗标,用于表示鼠标按键、Shift与Ctrl键的状态。
wParam的高字组保存一个「delta」值,该值目前可以是120或-120,向前转动或向后转动。值120或-120表示文件将分别向上或向下卷动三行。
lParam为鼠标的屏幕坐标
显示区域鼠标消息和显示区域鼠标消息wParam 的位屏蔽有
MK_LBUTTON按下左键
MK_MBUTTON按下中键
MK_RBUTTON按下右键
MK_SHIFT按下Shift键
MK_CONTROL按下Ctrl键
在窗口非显示区域鼠标消息
WM_NCMOUSEMOVE
当鼠标在窗口的显示区域移动时
WM_NCLBUTTONDOWN
按下鼠标左键
WM_NCLBUTTONUP
释放鼠标左键
WM_NCLBUTTONDBLCLK
双击鼠标左键
WM_NCMBUTTONDOWN
按下鼠标中键
WM_NCMBUTTONUP
释放鼠标中键
WM_NCMBUTTONDBLCLK
双击鼠标中键
WM_NCRBUTTONDOWN
按下鼠标右键
WM_NCRBUTTONUP
释放鼠标右键
WM_NCRBUTTONDBLCLK
双击鼠标右键
wParam命中的区域
lParam为鼠标的显示区域x坐标+y坐标
键盘消息
虚拟码
虚拟键码
值
对应键
VK_LBUTTON
1
Left mouse button
VK_RBUTTON
2
Right mouse button
VK_CANCEL
3
Control-break processing
VK_MBUTTON
4
Middle mouse button (three-button mouse)
VK_XBUTTON1
5
Windows 2000/XP: X1 mouse button
VK_XBUTTON2
6
Windows 2000/XP: X2 mouse button
VK_BACK
8
Backspace
VK_TAB
9
Tab
VK_CLEAR
12
Clear
VK_RETURN
13
Enter
VK_SHIFT
16
Shift
VK_CONTROL
17
Ctrl
VK_MENU
18
Alt
VK_PAUSE
19
Pause
VK_CAPITAL
20
Caps Lock
VK_KANA
21
IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
VK_HANGUL
21
IME Hangul mode
VK_JUNJA
23
IME Junja mode
VK_FINAL
24
IME final mode
VK_HANJA
25
IME Hanja mode
VK_KANJI
25*
IME Kanji mode
VK_ESCAPE
27
Esc
VK_CONVERT
28
IME convert
VK_NONCONVERT
29
IME nonconvert
VK_ACCEPT
30
IME accept
VK_MODECHANGE
31
IME mode change request
VK_SPACE
32
Space
VK_PRIOR
33
Page Up
VK_NEXT
34
Page Down
VK_END
35
End
VK_HOME
36
Home
VK_LEFT
37
Left Arrow
VK_UP
38
Up Arrow
VK_RIGHT
39
Right Arrow
VK_DOWN
40
Down Arrow
VK_SELECT
41
Select
VK_PRINT
42
VK_EXECUTE
43
Execute
VK_SNAPSHOT
44
Snapshot
VK_INSERT
45
Insert
VK_DELETE
46
Delete
VK_HELP
47
Help
48
0
49
1
50
2
51
3
52
4
53
5
54
6
55
7
56
8
57
9
65
A
66
B
67
C
68
D
69
E
70
F
71
G
72
H
73
I
74
J
75
K
76
L
77
M
78
N
79
O
80
P
81
Q
82
R
83
S
84
T
85
U
86
V
87
W
88
X
89
Y
90
Z
VK_LWIN
91
leftWindows key
VK_RWIN
92
rightWindows key
VK_APPS
93
Applications key
VK_SLEEP
95
Computer Sleep key
VK_NUMPAD0
96
Numeric keypad 0
VK_NUMPAD1
97
Numeric keypad 1
VK_NUMPAD2
98
Numeric keypad 2
VK_NUMPAD3
99
Numeric keypad 3
VK_NUMPAD4
100
Numeric keypad 4
VK_NUMPAD5
101
Numeric keypad 5
VK_NUMPAD6
102
Numeric keypad 6
VK_NUMPAD7
103
Numeric keypad 7
VK_NUMPAD8
104
Numeric keypad 8
VK_NUMPAD9
105
Numeric keypad 9
VK_MULTIPLY
106
Numeric keypad *
VK_ADD
107
Numeric keypad +
VK_SEPARATOR
108
Numeric keypad Enter
VK_SUBTRACT
109
Numeric keypad -
VK_DECIMAL
110
Numeric keypad .
VK_DIVIDE
111
Numeric keypad /
VK_F1
112
F1
VK_F2
113
F2
VK_F3
114
F3
VK_F4
115
F4
VK_F5
116
F5
VK_F6
117
F6
VK_F7
118
F7
VK_F8
119
F8
VK_F9
120
F9
VK_F10
121
F10
VK_F11
122
F11
VK_F12
123
F12
VK_F13
124
F13
VK_F14
125
F14
VK_F15
126
F15
VK_F16
127
F16
VK_F17
128
F17
VK_F18
129
F18
VK_F19
130
F19
VK_F20
131
F20
VK_F21
132
F21
VK_F22
133
F22
VK_F23
134
F23
VK_F24
135
F24
VK_NUMLOCK
144
Num Lock
VK_SCROLL
145
Scroll
VK_LSHIFT
160
left shift key
VK_RSHIFT
161
right shift key
VK_LCONTROL
162
left ctrl key
VK_RCONTROL
163
right ctrl key
VK_LMENU
164
left alt key
VK_RMENU
165
right alt key
VK_BROWSER_BACK
166
Windows 2000/XP: Browser Back key
VK_BROWSER_FORWARD
167
Windows 2000/XP: Browser Forward key
VK_BROWSER_REFRESH
168
Windows 2000/XP: Browser Refresh key
VK_BROWSER_STOP
169
Windows 2000/XP: Browser Stop key
VK_BROWSER_SEARCH
170
Windows 2000/XP: Browser Search key
VK_BROWSER_FAVORITES
171
Windows 2000/XP: Browser Favorites key
VK_BROWSER_HOME
172
Windows 2000/XP: Browser Start and Home key
VK_VOLUME_MUTE
173
Windows 2000/XP: Volume Mute key
VK_VOLUME_DOWN
174
Windows 2000/XP: Volume Down key
VK_VOLUME_UP
175
Windows 2000/XP: Volume Up key
VK_MEDIA_NEXT_TRACK
176
Windows 2000/XP: Next Track key
VK_MEDIA_PREV_TRACK
177
Windows 2000/XP: Previous Track key
VK_MEDIA_STOP
178
Windows 2000/XP: Stop Media key
VK_MEDIA_PLAY_PAUSE
179
Windows 2000/XP: Play/Pause Media key
VK_LAUNCH_MAIL
180
Windows 2000/XP: Start Mail key
VK_LAUNCH_MEDIA_SELECT
181
Windows 2000/XP: Select Media key
VK_LAUNCH_APP1
182
Windows 2000/XP: Start Application 1 key
VK_LAUNCH_APP2
183
Windows 2000/XP: 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
` ~
VK_OEM_4
219
[ {
VK_OEM_5
220
\ |
VK_OEM_6
221
] }
VK_OEM_7
222
' "
VK_OEM_8
223
Used for miscellaneous characters; it can vary by keyboard.VK_OEM_102
226
Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboardVK_PACKET
231
Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
VK_PROCESSKEY
229
Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
VK_ATTN
246
Attn key
VK_CRSEL
247
CrSel key
VK_EXSEL
248
ExSel key
VK_EREOF
249
Erase EOF key
VK_PLAY
250
Play key
VK_ZOOM
251
Zoom key
VK_NONAME
252
Reserved
VK_PA1
253
PA1 key
VK_OEM_CLEAR
254
Clear key
关于键盘消息的一些相关概念
扫描码和虚拟码
- 扫描码对应着键盘上的不同键,每一个键被按下或释放时,都会产生一个唯一的扫描码作为本身的标识
- 扫描码依赖于具体的硬件设备,即当相同的键被按下或释放时,在不同的机器上可能产生不同的扫描码
- 在程序中通常使用由Windows系统定义的与具体设备无关的虚拟码.在击键产生扫描码的同时,键盘驱动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息
- ASCII值对应着字符,而虚拟键代码是对应着键.例如字符A和a的ASCII值不同,但由于位于同一个键上,因此虚拟键代码相同
- 最后发送到消息队列的键盘消息中,既包含了扫描码又包含了虚拟码
输入焦点
- 同一时刻,Windows中可能有多个不同程序在运行.这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗口
- 拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗口.拥有输入焦点的也可以是图标而不是窗口,此时,Windows也将消息发送给图标,只是消息的格式略有不同
- 窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消息使窗体获得或失去输入焦点.程序也可以通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得或失去输入焦点.其中WM_SETFOCUS消息表示窗口正获得输入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点
注意:每当用户按下或释放某一个键时,会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理.KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理
系统键消息
系统键消息指由Aft键和其他键组合而产生的按键消息.当系统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息
Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换.因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理.如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作
非系统键消息
l那些不使用Alt键组合的按键消息
Windows用8种不同的消息来传递不同的键盘事件
按键消息
消息
类型
含义
WM_SYSKEYDOWN
系统
按下系统按键/组合按键
WM_SYSKEYUP
系统
松开系统按键/组合按键
WM_KEYDOWN
非系统
按下按键
WM_KEYUP
非系统
松开按键
字符消息
消息
类型
含义
WM_SYSCHAR
系统
系统字符
WM_SYSDEADCHAR
系统
系统死字符
WM_CHAR
非系统
字符
WM_DEADCHAR
非系统
死字符
注意
- 其中死字符是由某些特殊键盘上的按键所造成的,Windows一般忽略死字符所产生的消息
- 某些击键消息可以被转换成字符消息,例如字母键,数字键等.而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等
- WM_SYSKEYDOWN与WM_SYSKEYUP产生的是WM_SYSCHAR或WM_SYSDEADCHAR
- WM_KEYDOWN与WM_KEYUP产生的是WM_CHAR或WM_DEADCHAR
- 消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化.当GetMessage函数捕获一个WM_SYSKEYDOWN消息或WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息,再通过DispatchMessape函数将转换后的字符消息发送到消息队列中去
键盘消息MSG结构体变量
wParam域用于保存按键的虚拟键代码或字符的ASCII码.对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消息,wParam域不保存字符的ASCII码
lParam域则用于保存击键时产生的附加信息,实际上一个32位的lParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态
位数
含义
重复记数位(0-15)
击键重复次数累加
OEM扫描码(16-23)
OEM扫描码
扩展键标志位(24)
扩展键标志在有Alt键(或Ctrl)按下时为1,否则为0
保留位(25-28)
未定义
关联码(29)
右按键时,假如同时压下ALT键,那么内容代码为1。对WM_SYSKEYUP与WM_SYSKEYDOWN而言,此位总视为1;而对WM_SYSKEYUP与WM_KEYDOW消息而言,此位为0。除了两个之外:
- 如果活动窗口最小化了,则它没有输入焦点.这时候所有的按键都会产生WM_SYSKEYUP和WM_SYSKEYDOWN消息.如果Alt键未被按下,则内容代码字段被设定为0.Windows使用WM_SYSKEYUP和WM_SYSKEYDOWN消息,从而使最小化了的活动窗口不处理这些按键
- 对于一些外国语文(非英文)键盘,有些字符是通过Shift、Ctrl或者Alt键与其它键相组合而产生的.这时内容代码为1,但是此消息并非系统按键消息
键的先前状态(30)
如果在此之前键是释放的,则键的先前状态为0,否则为1。对WM_KEYUP或者WM_SYSKEYUP消息,它总是设定为1;但是对WM_KEYDOWN或者WM_SYSKEYDOWN消息,此位可以为0,也可以为1。如果为1,则表示该键是自动重复功能所产生的第二个或者后续消息
转换状态(31)
如果键正被按下,则转换状态为0;如果键正被释放,则转换状态为1。对WM_KEYDOWN或者WM_SYSKEYDOWN消息,此字段为0;对WM_KEYUP或者WM_SYSKEYUP消息,此字段为1
按键消息的顺序
WM_KEYDOWN/WM_SYSKEYDOWN
↓
WM_CHAR/WM_SYSCHAR
↓
WM_KEYUP/WM_SYSKEYUP
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
例如,按下并释放1键.按下1键所产生的消息和wParam的取值
消息 wParam变量取值
WM_KEYDOWN 虚拟码1
WM_CHAR ASCII码“1”
WM_KEYUP 虚拟码1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
例如,按下Shift键后再按下1键并释放,则依次产生如表所示的消息.按下Shift键后按健所产生的消息和wParam的取值
消息 wParam变量取值
WM_KEYDOWN 虚拟码 VK_SHIFT
WM_KEYDOWN 虚拟码 VK_1
WM_CHAR ASCII码 “1”
WM_KEYUP 虚拟码 VK_1
WM_KEYUP 虚拟码 VK_SHIFT
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- 系统消息 -- 键鼠消息
- 系统消息 -- 键鼠消息
- 系统消息
- 系统消息
- 系统消息
- 系统消息
- 系统消息
- 系统消息
- 消息系统
- 消息系统
- 消息
- 消息
- 消息
- 消息
- 消息
- 消息
- 消息
- 消息
- wps 的目录创建
- 从Boost退出的库
- java 排序算法
- java----集合类
- 轻轻松松磁盘整理巧用UltimateDefrag软件
- 系统消息 -- 键鼠消息
- 进程与线程
- (LKD3)读书记录-Chapter4:进程调度
- 分辨率的问题思考
- jsp数据库脱裤脚本,可脱mysql,oracle.
- Linux下编写C++实例程序(一)
- html5开源引擎 整理
- Ubuntu12.04下pulseaudio的安装以及API使用
- C++11之Lambda表达式