一、 WM_*KEY*与WM_CHAR区别
1.WM_*KEY* 消息(WM_KEYDOWN/WM_KEYUP、WM_SYSKEYDOWN/WM_SYSKEYUP)是描述键盘虚拟键码的,它对应的是键盘物理按键。
2.WM_CHAR 则是描述字符码的,它对应的键盘操作所按下的字符。
这二者之间的映射关系在不同物理键盘设备下并不固定,所以Windows封装了TranslateMessage这个API来完成物理键到字符的转换。
WM_CHAR消息只响应字符和部分字符相关的控制符(如空格、回车),
其它控制键码则不响应,如: Tab、Caps Lock、ESC、F1~F12、SHIFT、CTRL、ALT、方向键、方向键上方键盘区和Num Lock键等。
二、WM_SYSKEY*与WM_KEY*区别
WM_SYSKEY*消息由两种情况产生:
1.F10键激活程序窗口菜单;
2.由与Alt相组合的按键产生,这些按键启动程序菜单或者系统菜单上的选项,或者用于切换活动窗口等系统功能(Alt-Tab或者Alt-Esc),也可以用作加速键(Alt键与一个功能键相结合,例如Alt-F4用于关闭应用程序)。
程序通常忽略WM_SYSKEY*消息,并将它们传送到DefWindowProc。由于Windows要处理所有Alt键的功能,所以无需拦截这些消息。