2009-05-18 2 views
1

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

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

?

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

ответ

2

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

SetWindowsHookEx используя WH_KEYBOARD

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

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

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


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

0

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

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

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

Cheers. Кит.

EDIT: Я только что подумал ... методы могут теперь отличаться между версиями окон и множеством различных устройств ... О, хорошо!

+0

Нет, я действительно хочу знать, как это реализовано. Бит о подавлении - это справочная информация. Мое подозрение состояло в том, что он может быть на аппаратном уровне (который, если это правда, дает мне больше возможностей для перехвата). –

0

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

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

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

+0

Я хочу, чтобы уметь подавлять это программно, но я рад, что смогу разобраться, как это сделать, как только я пойму, как/где выполняется автоматическое повторение. –