当前位置:C++技术网 > 精选软件 > 键盘的重复速度属性对长按的按键消息产生频率的影响

键盘的重复速度属性对长按的按键消息产生频率的影响

更新时间:2016-01-02 01:16:31浏览次数:1+次

    键盘按键的字符重复的两个属性即重复延迟和重复速度是影响键盘输入的两个重要属性。我们在文章《键盘的重复速度属性对长按的按键消息产生频率的影响》中已经讲述了重复延迟的属性,实际上就是检测长按开始的时间。文章有详细的解释,不清楚的先去看看。
    那么本文就来讲讲重复速度属性。通过“控制面板”->“键盘”就可以找到键盘属性设置对话框。这个对话框的提示文字,都是针对于普通的Windows用户而言的,对于程序员来讲,它的含义是很明确也含糊的。
    对于非程序员来讲,重复速度就是长按下按键时能够输入的文字字符的间隔时间。也就是字符与字符产生之间,是有一个间隔时间的。如果设置的速度越慢,那么上一个字符产生之后,要比较长的时间才能产生下一个字符。这个不限于输入一个字符,包括控制字符,比如删除一个文字就是输入了一个删除字符的控制字符。而如果设置的重复速度很快,也就是在长按按键的情况下,可以快速的产生很多字符。也就是说,重复速度越来,长按时连续产生的两个字符的时间间隔很短。

    下面是两组产生字符的快慢的效果,都是长按按键产生的字符:

重复速度最慢时长按按键产生的字符的效果

【重复速度最慢时长按按键产生的字符的效果】

重复速度最快时长按按键产生的字符的效果

【重复速度最快时长按按键产生的字符的效果】
    可以看到,重复速度最慢的效果就是一个一个的字输入,而重复速度最快的效果则是一下子输入一大片字符。这个效果的应用你可以自己想象。
    如果只是普通电脑用户,那么到此就没有什么好讲的了。然而对于程序员来说,还要进一步理解。长按按键时的文字重复速度属性实际上就对应了WM_KEYDOWN消息的产生速度。文字重复速度越快,也就对应了长按时WM_KEYDOWN消息产生的越多。文字输入其实就是对于这个消息的响应而已。
    那么键盘按键长按的文字重复速度属性到底对编程有什么影响呢?长按键盘按键如果产生的消息很多,对于程序来讲,就怕消息太多了处理不过来。如果一个个消息不遗漏的处理,则会让程序反应很慢。但是如果不保证所有消息都处理,那么就会让消息有遗漏。要保证所有消息都不遗漏,可以用一个快速的方法,将必要的信息快速存入一个地方,然后再慢慢的处理。比如Photoshop软件在擦除图片背景时基本快速移动鼠标基本不会断线,也就是擦除的痕迹基本是连续的。如果在鼠标移动消息中即时处理,应该是处理不过来的。所以它可以先将轨迹坐标快速存储起来,然后可以开一个线程来绘图。这样就可以确保不丢失消息。毕竟人的速度不会太快。这个经过本人测试,PS经得住考验。
    那个是鼠标的消息的快速产生的案例。这里就是按键的长按产生的大量消息。我们可以通过控制键盘的文字重复速度属性来降低消息产生的速度,进而缓解程序的处理压力。常用的就是一些编辑框文字的各种检测。
    如果你将编辑框的属性改为数字输入框,也就要对输入的字符进行检测,每一个字符一输入就要检测,那么对于每一个字符的消息就要做一个检测,如果不是数字,则不会设置字符到编辑框中。如果用户长按了按键,那么就会产生大量的字符消息,这样就要处理大量的消息。如果处理不过来,程序就卡死了。如果键盘重复速度慢点,自然程序检测起来也就轻松些。
    同时,既然程序处理不过来,对于同样的按键消息,Windows就使用一个16位的参数来存储这个按键重复的次数,这个就是WM_KEYDOWN消息的lParam参数携带的信息。这个我们再另外详细分析,这里就不再解释了。
    这里就是要告诉你,系统的键盘设置的重复速度属性和WM_KEYDOWN消息的关联,将这些都联系起来学习,而不是孤立的学习编程。这样会让你对Windows系统了解更加深入。