基本上,当一种类型时,会发生 keydown 事件。如果按住键超过一定时间(~1 秒),则重复按下该键,直到 keyup 发生。我想更改在我的 c++ 应用程序中自动抑制密钥所需的时间。如何才能做到这一点?
谢谢
按键自动重复的速度由 Windows 控制。
如果您想操纵按键的自动重复,轮询键的状态可能比等待 keydown 事件更有利。这取决于您需要应用程序的响应速度。
本文可能会帮助您弄清楚如何查询关键状态:链接
您可以使用 SystemParametersInfo 函数来更改键盘延迟和刷新率,如此新闻组线程中所述。
处理此问题的一种简单方法是围绕 OnKeyDown 事件建立时间缓冲区。设置一个计时器,确定控制权是否传递给辅助事件处理程序。如果计时器已过期,则可以通过控制。如果计时器没有过期,那么您应该返回并让事件不处理。在将控制权传递给辅助事件处理程序之前启动计时器。
void KeyDownHandler(...)
{
// ...
if (TimeLeft() <= 0)
{
StartTimer();
handleKeyDown();
}
}
计时器比计算重复事件要好,因为您不能假设给定系统将设置与您相同的重复率。
我同意 Stuart 的观点,即轮询密钥状态可能会更好。这取决于您要完成的工作。
另请注意,这种类型的行为可能会让您的用户非常讨厌 - 为什么您需要忽略重复项?
您可能能够利用 Windows API,但这可能由操作系统控制。不确定...您可能需要手动绘制命令,例如在按下键后的设定秒数后多次模拟按键。
使用 SetKeySpeed api(内核)