处理 WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN,WM_SYSKEYUP 信息时lParam 参数的值的说明

在处理 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN 和 WM_SYSKEYUP 信息时,wParam 是被按下健的虚拟键码,而 lParam 参数时保存了比较多的信息,下面是对这些信息的说明:

0 - 15 位是指按键的重复次数,什么是按键的重复次数呢?
假如你按下了字母键 A, 此时系统把信息发给你的程序去处理,但此时你的程序还在处理其他的信息,在还没有处理这个信息之前,你又按下了字母键 A, 这时系统不把在发一个消息到你的应用程序中去,而是在前一个信息的重数次数上面加1,重复次数就变成了2,如果你的程序还未处理这个信息而你又按了字母键 A,这个重复次数就会不停的添加。
在的程序处理此信息时,可以检查一下这个重复次数的值,以便进进行相应的处理,也可以忽略此信息。

16 - 23 位是OEM(Original Equipment Manufacturer,原设备制造商)码,此代码是由键盘硬件生成的代码,此代码表示键盘上的某一个键,这是与硬相关的代码,比如16表示Q键,17表示W键,18表示E键等,但是如果在以后的键盘设计中,把Q键位置放到其他的位置,那16就不表示Q键了,因为这是与设备相关的,所以我们在程序中一盘不使用OEM代码,而是使用虚拟键码,因为这是与设备无关的代码。

24 位:指示一个键是否是一个扩充键,什么是扩充键?
现在我们使用的键盘一般都是101或102键的键盘,原来的键盘是没有这么多键,所以现在多出来的键就是扩充键,当一个键是一个扩充键时,此位的值为1,否则为0。
101键或102键的键盘上,方向键,右边的 alt 键,ctrl 键等都是扩充键。

25,26,27,28 位还未使用。

29 位:这个位的值表示是什么意思还不太明白。

30 位:指示键的先前状态,什么是键的先前状态呢?
假如你按了一个键A,此时发送一条消息到应用程序,发送这条信息之前这个键的状态是按下的还是是未按下的呢,如果是按下的,此位的值就为1,否则为0。
当你第一次按下一个按时,这时这个值为0,因为你按发送消息前你的键未按下,但是当你按下键一段时间不释放他,这此系统就会不停的向程序发送信息,这时这个值就为1,因为发送信息时,这个键是按下的。

31 位:如果键被按下,此位的值为1,否则为0

posted @ 2004-12-26 16:24  匡匡  阅读(1877)  评论(0编辑  收藏  举报