Как реализовано автоматическое повторение клавиатуры на ПК с Windows?

Я хочу иметь возможность перехватывать (и выполнять произвольную обработку) автоматически повторяющиеся нажатия клавиш в Windows. Я хотел бы знать, как реализовано автоматическое повторение клавиатуры, чтобы я знал, какие у меня есть варианты. т.е. я могу перехватить на:

  • приложение,
  • драйвер устройства и / или
  • аппаратный уровень

?

Обновление: похоже, что автоповтор (плохо?) Генерируется на аппаратном уровне, а затем переопределяется драйверами устройств ( см. Здесь).

3 ответа

Решение

Чтобы изменить или отфильтровать поведение, вы можете перехватывать ключи с помощью ловушки:

SetWindowsHookEx с помощью WH_KEYBOARD

Процедура подключения получает, среди прочего, счетчик повторов (из-за удержания клавиши)

Обратите внимание, что крючок клавиатуры низкого уровня (WH_KEYBOARD_LL) не получает счетчик повторов.

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


Я смутно помню, что количество повторов генерируется самой клавиатурой, а перехватчик LL отправляет повторяющиеся события нажатия клавиш, хотя я могу ошибаться. В DOS частота и время повторения клавиш, которые были установлены в BIOS или через вызов BIOS, возвращались к значениям по умолчанию, когда клавиатура DIN или PS/2 была отключена и подключена повторно. Я не уверен, ПОЧЕМУ вам нужно точно знать.

Похоже, это "Не связано с программированием". Перейдите в "Опции доступности" на панели управления. Выберите "Настройки" в группе "Фильтрующие ключи", здесь вы можете отключить повторяющиеся клавиши для этого пользователя на этом компьютере.

Надеюсь, это то, что вы ищете.

PS Выше приведены инструкции для Windows XP.

Я полагаю, что вы, возможно, захотите отредактировать свой вопрос... фактический вопрос - "Как отключить автоповтор в Windows в ${yourLangauge}"...

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

Реализация автоповтора ($100 говорит, что это ассемблер), вероятно, не проливает свет на его подавление... и Microsoft разыгрывает эти карты очень близко к груди.

Приветствия. Кит.

РЕДАКТИРОВАТЬ: Я просто подумал... методы могут теперь отличаться в разных версиях Windows и множество различных устройств... О, боже!

Другие вопросы по тегам