Захватить последовательность клавиш через ProcessCmdKey - PullRequest
1 голос
/ 30 октября 2011

Я перезаписываю ProcessCmdKey в своем приложении и могу получить любое нажатие клавиши с модификаторами (например, Alt + Ctrl + X). То, что я хочу сделать, это имитировать краткую обработку, скажем, ReSharper, где пользователь удерживает клавишу управления, а затем R, M, чтобы открыть диалоговое окно рефакторинга

Я нашел много ссылок, чтобы захватить комбинации клавиш и модификаторов, но не так много для последовательности. Существует это Захват нескольких нажатий клавиш в C # , но он использует событие KeyDown.

Существуют также ключевые примеры майнинга, такие как http://www.codeproject.com/KB/system/simple_key_log.aspx, которые фиксируют все и используют собственные вызовы.

Могу ли я расширить свой ProcessCmdKey для обработки последовательностей клавиш или мне нужно искать в другом месте? Поскольку в ProcessCmdKey записано большое количество ярлыков, я бы предпочел не запускать их снова, если это возможно

Спасибо

1 Ответ

3 голосов
/ 30 октября 2011

Для достижения требуемой функциональности вам просто нужно отслеживать последовательность KeyPress событий.

Вы можете создать класс для отслеживания последней комбинации клавиш, которая была нажата в ProcessCmdKey. Если эта конкретная комбинация не соответствует сопоставленной команде, но является первым элементом последовательности, вы можете сохранить ее в своем классе. Затем в следующий раз при активации ProcessCmdKey проверьте ваш новый класс KeyPressTracker, чтобы определить, была ли запущена последовательность. Если это так, проверьте, является ли вновь нажатая комбинация клавиш вторым элементом, который вы указали. Пожалуйста, смотрите пример псевдокода ниже:

Шаг 1: ProcessCmdKey активирован. Комбинация клавиш: Ctrl + R , это не соответствует команде, которую вы хотите обработать, но это первый элемент последовательности, который вы хотите использовать ( Ctrl + R + M ).

Шаг 2: Сохраните это нажатие клавиши в новом классе, который вы создали, чтобы отследить последнее нажатие клавиши.

KeyPressTracker.Store(KeyCode, Modifiers);

Шаг 3: ProcessCmdKey активируется второй раз. На этот раз комбинация клавиш Ctrl + M - это не нажатие клавиши, которое мы ищем, а второй элемент последовательности. Мы проверяем последнее сохраненное нажатие клавиши, используя новый класс KeyPressTracker. Это позволит вам сопоставить «последовательность», такую ​​как Ctrl + R и Ctrl + M .

var lastKeyPress = KeyPressTracker.GetLastKeyPress();

if (lastKeyPress == "Ctrl+R" && currentKeyPress == "Ctrl+M")
{   
    // Show Refactor dialog
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...