При зажатии клавиши на клавиатуре начинается автоповтор нажатий, т.е. одна и та же клавиша начинает нажиматься несколько раз. У меня вот такой вопрос: как программно задавить в любой момент времени автоповтор нажатия клавиши? Если пользователь нажимает клавишу моя прога перехватывает нажатие и начинает что-нибудь делать, и вот как раз в этот момент надо приглушить автоповтор нажатия. Физически это можно сделать кратковременно нажав в этот момент времени другую клавишу. Например при зажатой клавиши Win надо нажать клавишу T: Код (Text): D - Left Windows 91 91 1 D - Left Windows 91 91 1 D - Left Windows 91 91 1 D - Left Windows 91 91 1 D - T 84 20 0 U - T 84 20 128 U - Left Windows 91 91 129 При этом автоповтор нажатий прекратится, но клавиша Win останется нажатой (последняя строка в примере — клавишу Win я отпустил через довольно большой промежуток времени и это показывает, что после нажатия клавиши T не было больше автоповтора Win). Вот это именно то что надо! Но все это работает если только физически нажать клавишу T на клавиатуре. При программной эмуляции — SendInput, автоповтор Win не прекращается. Как-то можно разрулить это без создания драйвера/фильтра и без режима ядра? Сейчас я обхожусь и без этого — фильтрую информацию о нажатиях в своем приложении, но теперь приложение слишком разрослось и это стало очень накладно.
Если тебе надо обрабатывать клавиши не только в твоем приложении, а в системе в целом, то лучше ставить хук на WH_KEYBOARD и при поступлении сообщения WM_KEYDOWN посылать WM_KEYUP я думаю так.
У меня и так стоит WH_KEYBOARD_LL, и я сейчас делаю нечто похожее на то что ты советуешь - я как раз фильтрую некоторые нажатия клавиш. Но этот способ не универсален, хочу сделать как-нибудь по-другому.