Delphi — програмная эмуляция удержания кнопок клавиатуры

Пытаюсь решить задачу — сэмулировать удержание клавиш q,w,e,r,t,y с заданным временным лимитом.
Аналогично тому, как мы зажимая клавишу например в этом текстовом поле на 2 секунды: йййййййййй

Пытался решить через keybd_event как написано в сотнях мануалов:

C := ord('Q');
keybd_event(C,0,0,0);
sleep(2000);
keybd_event(C,0,KEYEVENTF_KEYUP,0);


Затем попытался отправить клавиатурный ввод тому же блокноту — в результате получаю только 1 символ

Если решать «в лоб», то я пытался зделать так:
C := ord('Q');
for i := 1 to 200 do begin
keybd_event(C,0,0,0);
sleep(10);
end;
keybd_event(C,0,KEYEVENTF_KEYUP,0);

Но в таком случае количество символов будет отличаться от того, если бы я зажимал клавишу сам (будет введено 200 символов) + я думаю этот подход неверный.

Подскажите в какую сторону копать, что бы добиться реалистичного ввода зажатой клавиши :)
  • Вопрос задан
  • 3631 просмотр
Пригласить эксперта
Ответы на вопрос 3
@Mercury13
Программист на «си с крестами» и не только
Автоповтор кнопок, к сожалению, придётся реализовывать самому.
Ответ написан
Riateche
@Riateche
Воспользуйтесь ключом регистра KEY_CURRENT_USER\Control Panel\Keyboard\KeyboardSpeed.
Ответ написан
@gl00k
Причем можно запускать отдельный поток, который будет повторять нажатие клавиши с необходимой задержкой (как указал ), а когда нужно суспендить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы