基本上,当一种类型时,就会发生keydown事件。如果按键保持超过一定时间(约1秒),则反复按键直到键盘停止。我想更改密钥在我的c ++应用程序中自动压缩所需的时间。怎么办呢?
由于
答案 0 :(得分:3)
按键自动重复出现的速度由Windows控制。
如果要操纵按键的自动重复,则轮询键的状态而不是等待keydown事件可能更有利。这取决于您对应用程序的响应程度。
本文可以帮助您找出如何查询关键状态:link
答案 1 :(得分:1)
您可以使用SystemParametersInfo函数更改键盘延迟和刷新率,如this newsgroup thread中所述。
答案 2 :(得分:0)
处理此问题的一种简单方法是在OnKeyDown事件周围建立一个时间缓冲区。设置一个计时器,确定控件是否传递给辅助事件处理程序。如果计时器已过期,则可以通过控制。如果计时器尚未到期,那么您应该返回并保持事件未处理。在将控制传递给辅助事件处理程序之前启动计时器。
void KeyDownHandler(...)
{
// ...
if (TimeLeft() <= 0)
{
StartTimer();
handleKeyDown();
}
}
计时器比计算重复事件更好,因为您无法假设给定系统将具有与您相同的重复率设置。
我同意Stuart的观点,即关键状态的轮询可能会更好。这取决于你想要完成的任务。
另请注意,此类行为可能会让您的用户感到非常恼火 - 为什么您需要忽略重复项?
答案 3 :(得分:0)
您可以使用Windows API,但这可能由操作系统控制。不确定... 您可能需要手动绘制一个命令,例如在按下按键后的一定秒数后多次模拟按键。
答案 4 :(得分:-1)
使用SetKeySpeed api(内核)