Автоповтор нажатия клавиш

Тема в разделе "WASM.WIN32", создана пользователем jorg, 18 апр 2006.

  1. jorg

    jorg New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2006
    Сообщения:
    2
    При зажатии клавиши на клавиатуре начинается автоповтор нажатий, т.е. одна и та же клавиша начинает нажиматься несколько раз. У меня вот такой вопрос: как программно задавить в любой момент времени автоповтор нажатия клавиши?



    Если пользователь нажимает клавишу моя прога перехватывает нажатие и начинает что-нибудь делать, и вот как раз в этот момент надо приглушить автоповтор нажатия.



    Физически это можно сделать кратковременно нажав в этот момент времени другую клавишу. Например при зажатой клавиши Win надо нажать клавишу T:


    Код (Text):
    1.  
    2. D - Left Windows  91 91 1
    3. D - Left Windows  91 91 1
    4. D - Left Windows  91 91 1
    5. D - Left Windows  91 91 1
    6. D - T  84 20 0
    7. U - T  84 20 128
    8. U - Left Windows  91 91 129
    9.  




    При этом автоповтор нажатий прекратится, но клавиша Win останется нажатой (последняя строка в примере — клавишу Win я отпустил через довольно большой промежуток времени и это показывает, что после нажатия клавиши T не было больше автоповтора Win). Вот это именно то что надо!



    Но все это работает если только физически нажать клавишу T на клавиатуре. При программной эмуляции — SendInput, автоповтор Win не прекращается.



    Как-то можно разрулить это без создания драйвера/фильтра и без режима ядра?



    Сейчас я обхожусь и без этого — фильтрую информацию о нажатиях в своем приложении, но теперь приложение слишком разрослось и это стало очень накладно.
     
  2. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Если тебе надо обрабатывать клавиши не только в твоем приложении, а в системе в целом, то лучше ставить хук на WH_KEYBOARD и при поступлении сообщения WM_KEYDOWN посылать WM_KEYUP я думаю так.
     
  3. jorg

    jorg New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2006
    Сообщения:
    2
    У меня и так стоит WH_KEYBOARD_LL, и я сейчас делаю нечто похожее на то что ты советуешь - я как раз фильтрую некоторые нажатия клавиш.



    Но этот способ не универсален, хочу сделать как-нибудь по-другому.