2009-09-15 2 views
0

В принципе, когда один тип, происходит событие keydown. Если ключ удерживается в течение некоторого времени (~ 1 с), клавиша повторно нажимается до тех пор, пока не начнется нажатие клавиши. Я хотел бы изменить время, необходимое для автоматического нажатия клавиши в моем приложении на C++. Как это может быть сделано?Изменение скорости нажатия клавиши C++

Благодаря

+0

im making the tetris game – jmasterx

ответ

3

Скорость, при которой нажатие клавиши становится автоматически Повторяющиеся управляется Windows.

Если вы хотите манипулировать автоматическими повторениями нажатия клавиш, может быть более выгодным опросить состояние ключа, а не ждать события keydown. Это зависит от того, насколько оперативно вам нужно ваше приложение.

Эта статья может помочь вам в выяснить, как для запроса ключевых состояний: link

0

Простой способ справиться с этим является создание буфера времени вокруг OnKeyDown события. Настройте таймер, который определяет, проходит ли управление второму обработчику событий. Если таймер истек, тогда это нормально, чтобы передать управление. Если таймер не истек, то вы должны вернуться и оставить событие необработанным. Запустите таймер прямо перед передачей управления второму обработчику событий.

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

Таймер лучше, чем подсчет повторяющихся событий, потому что вы не можете предположить, что данная система будет иметь ту же частоту повтора набора, как ваша.

Я согласен с Стюартом в том, что опрос на состояние ключа может работать лучше. Это зависит от того, чего вы пытаетесь достичь.

Также обратите внимание, что этот тип поведения может быть очень раздражающим для вашего пользователя - почему вам нужно игнорировать дубликаты?

+0

Вместо того, чтобы полагаться на клавиатуру autorepeat (которая будет отличаться от системы к системе), просто отследите, выключен ли ключ или нет, и выполните автоповтор вручную в своем приложении. KeyDownHandler должен запустить периодический таймер повторения, и KeyUpHandler должен очистить его. –

-1

Использование SetKeySpeed ​​апи (Kernel)

+0

Не изменяйте глобальные настройки только для своего приложения. –

0

Вы можете быть в состоянии подключиться к Windows API, но это может управляться ОС. Не уверен ... Возможно, вам потребуется вручную нарисовать команду, например, для имитации нажатия клавиши несколько раз после заданного количества секунд после нажатия клавиши.

1

Вы можете использовать функцию SystemParametersInfo для изменения задержки клавиатуры и частоты обновления, как описано в this newsgroup thread.

+0

+1, но не рекомендуется менять глобальные настройки в интересах одного приложения. В этом случае ответ Стюарта лучше. –

Смежные вопросы