none
Как перехватить системную обработку нажатия клавиши WIN RRS feed

  • Вопрос

  • Пишу WPF-приложение на C#. Про установку хук-ловушек в .Net приложениях существует много примеров и я их смотрел. Проблема в следующем...

    Мне нужно перехватить и запретить нажатие клавиши WIN, чтобы не появлялось стандартное меню Пуск. Я использую хук-код, основанный на этом примере: Processing Global Mouse and Keyboard Hooks in C#. Перехватываю событие WM_KEYUP для клавиш VK_LWIN / VK_RWIN и запрещаю его дальнейшую обработку путём возврата значения -1 при выходе из моей хук-функции. Вроде бы добиваюсь нужного эффекта - меню Пуск не появляется. Однако есть проблема: статус клавиши WIN остаётся 'pressed' (проверяю позднее функцией GetAsyncKeyState), что вызывает нежелательные клавиатурные эффекты. Иногда это проявляется и с другими клавишами (Shift/Ctrl/Alt), но с клавишей WIN - всегда.

    Пробовал использовать функцию SendInput для симуляции "отпускания" клавиши WIN - помогает, но приводит к появлению меню Пуск. Пробовал сбрасывать нажатый статус клавиши WIN с помощью функции SetKeyboardState - эффекта нет, клавиша остаётся нажатой.

    Вопрос: как избавиться от эффекта "залипания" клавиши WIN? Или что я делаю не так?

    PS: версия ОС - Windows 7

    Спасибо.


    1 апреля 2011 г. 11:35

Ответы

  • Я глупец... Я должен перехватывать оба события: WM_KEYDOWN и WM_KEYUP (а не только WM_KEYUP) для нужной клавиши. Это решило мою проблему.

    • Помечено в качестве ответа tms320 1 апреля 2011 г. 12:09
    1 апреля 2011 г. 12:09