0

基本上,当一种类型时,会发生 keydown 事件。如果按住键超过一定时间(~1 秒),则重复按下该键,直到 keyup 发生。我想更改在我的 c++ 应用程序中自动抑制密钥所需的时间。如何才能做到这一点?

谢谢

4

5 回答 5

3

按键自动重复的速度由 Windows 控制。

如果您想操纵按键的自动重复,轮询键的状态可能比等待 keydown 事件更有利。这取决于您需要应用程序的响应速度。

本文可能会帮助您弄清楚如何查询关键状态:链接

于 2009-09-15T20:43:00.340 回答
1

您可以使用 SystemParametersInfo 函数来更改键盘延迟和刷新率,如此新闻组线程中所述。

于 2012-06-09T20:18:43.233 回答
0

处理此问题的一种简单方法是围绕 OnKeyDown 事件建立时间缓冲区。设置一个计时器,确定控制权是否传递给辅助事件处理程序。如果计时器已过期,则可以通过控制。如果计时器没有过期,那么您应该返回并让事件不处理。在将控制权传递给辅助事件处理程序之前启动计时器。

void KeyDownHandler(...)
{
    // ...
    if (TimeLeft() <= 0)
    {
        StartTimer();
        handleKeyDown();
    }
}

计时器比计算重复事件要好,因为您不能假设给定系统将设置与您相同的重复率。

我同意 Stuart 的观点,即轮询密钥状态可能会更好。这取决于您要完成的工作。

另请注意,这种类型的行为可能会让您的用户非常讨厌 - 为什么您需要忽略重复项?

于 2009-09-15T20:53:06.500 回答
0

您可能能够利用 Windows API,但这可能由操作系统控制。不确定...您可能需要手动绘制命令,例如在按下键后的设定秒数后多次模拟按键。

于 2011-09-19T22:34:18.220 回答
-1

使用 SetKeySpeed api(内核)

于 2009-09-18T16:33:19.863 回答