windows键盘消息

键盘消息

键盘消息分为击键消息和字符消息

击键消息,如
WM_KEYDOWN
WM_KEYUP
WM_SYSKEYDOWN
WM_SYSKEYUP

字符消息,如
WM_CHAR
WM_DEADCHAR
WM_SYSCHAR
WM_SYSDEADCHAR

//带有SYS表示一般交给DefWindowProc处理,如包含Alt的击键

击键消息

以WM_KEYDOWN 消息为例:

消息含义:
当一个非系统按键被按下的时候,发送到键盘焦点所在窗口的消息。
非系统按键指的是没有与 ALT 键同时按下的任何按键。


消息定义:


#define WM_KEYDOWN 0x0100


参数:
wParam:指定该按键的虚拟键代码。
lParam:指定重复计数、OEM 扫描码、扩展键标记、内容代码、先前状态和转换状态,具体含义和表示方法如下:

含义
0-15 1. 当前消息被重复的次数
2. 当用户按下按键不松开时,Windows 会将该键产生的所有 WM_KEYDOWN 消息合称为一个消息,并增加该字段的值
3. 重复计数大于 1 表明此时连续击键的速度快于程序的处理能力
16-23 OEM 扫描码(键盘硬件产生的代码)
24 1. 指定该按键是否扩展键
2. 比如 IBM 加强型键盘有 101 或 102 个键,右边的 ALT 和 CTRL 就是扩展键
25-28 系统保留
29 内容代码:对于 WM_KEYDOWN 消息来说,这个值总是 0
30 先前状态:在消息发送前如果按键是被按下的话该值是 1,否则是 0
31 转换状态:对于 WM_KEYDOWN 消息来说,这个值总是 0

windows键盘消息_第1张图片

键盘扫描码:是基于键盘硬件真实的扫描码,可能因键盘的厂家,型号不同而有所不同
虚拟键代码:Microsoft为消除扫描码弊端,把各个按键的扫描码映射成的代码(不区分大小写,即大小写字符虚拟键代码相同)

字符消息

击键消息通过  TranslateMessage()  函数转换为字符消息。

参数:
wParam:ANSI字符码或Unicode字符码
lParam:同击键消息

//如果注册窗口类时调用的  RegisterClass  被宏定义为  RegisterClassW  则表示使用的是Unicode字符码,如果被宏定义为  RegisterClassA则表示使用的是ANSI字符码。也可以通过  IsWindowUnicode()函数判断。

你可能感兴趣的:(windows键盘消息)