当用户按住ALT键然后按另一个键时,WM_SYSKEYDOWN消息会发送到具有键盘焦点的窗口。当窗口当前没有键盘焦点时也会发生;在这种情况下,WM_SYSKEYDOWN消息被发送到活动窗口。接收消息的窗口可以通过检查【lKeyData】参数中的上下文代码来区分这两个上下文。
WM_SYSKEYDOWN
nVirtKey = (int) wParam; //虚拟键代码
lKeyData = lParam; //关键数据
参数
【nVirtKey】
价值【wParam中】.指定被按下的键的虚拟键代码。
【lKeyData】
价值【lParam的】.指定重复计数,扫描码,扩展密钥标志,上下文代码,先前的密钥状态标志和转换状态标志,如下表所示:
值 | 描述 |
0-15 | 指定重复计数。该值是由于用户按住键而重复键击的次数。 |
16-23 | 指定扫描码。价值取决于原始设备制造商(OEM)。 |
24 | 指定该键是否为扩展键,例如增强型101-或102键键盘上显示的右侧ALT和CTRL键。如果是扩展密钥,则该值为1;否则为0。 |
25-28 | Reserved; do not use. |
29 | 指定上下文代码。如果在按下该键的同时按下ALT键,则该值为1;如果WM_SYSKEYDOWN消息发布到活动窗口,则为0,因为没有窗口具有键盘焦点。 |
30 | 指定以前的键状态。如果密钥在发送消息之前关闭,则该值为1,如果该键已经关闭,则该值为0。 |
31 | 指定转换状态。WM_SYSKEYDOWN消息的值始终为0。 |
返回值
处理此消息时,应用程序应返回零。
默认动作
如果键为TAB或ENTER,则DefWindowProc功能将检查给定的键并生成WM_SYSCOMMAND消息。
备注
当上下文代码为零时,消息可以传递给TranslateAccelerator函数,它将处理它,就像它是一个正常的密钥消息而不是系统字符密钥消息。即使活动窗口没有键盘焦点,这也允许加速键与活动窗口一起使用。
由于自动重复,在发送WM_SYSKEYUP消息之前可能会出现多个WM_SYSKEYDOWN消息。先前的键状态(位30)可用于确定WM_SYSKEYDOWN消息是否指示第一次向下转换或重复向下转换。
对于增强的101-和102键键盘,增强的键是键盘主要部分上的ALT和CTRL键;集群中的INS,DEL,HOME,END,PAGE UP,PAGE DOWN和箭头键在数字键盘的左侧;和数字键盘中的除数(/)和ENTER键。其他键盘可能支持【lParam的】参数中的扩展密钥位。
也可以看看
DefWindowProc, TranslateAccelerator, WM_SYSCOMMAND, WM_SYSKEYUP