Как реализовано автоматическое повторение клавиатуры на ПК с Windows? - PullRequest
1 голос
/ 18 мая 2009

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

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

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

Ответы [ 3 ]

3 голосов
/ 18 мая 2009

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

SetWindowsHookEx с использованием WH_KEYBOARD

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

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

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


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

0 голосов
/ 18 мая 2009

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

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

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

0 голосов
/ 18 мая 2009

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

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

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

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

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

...