Сочетание клавиш - одновременное нажатие Alt-Ctrl-Shift-D не работает - PullRequest
0 голосов
/ 10 июля 2020

Я использую реализацию, которая реагирует на одновременное нажатие клавиш Ctrl + Alt + Shift + D тем временем более 2 месяцев ни разу не было проблем. Два дня go я обнаружил, что этот короткий путь больше не работает (не работал и с выпущенной версией, что определенно является проблемой!). => Перезагрузка P C в конечном итоге сделала свою работу, и она снова заработала ... хорошо ... возможно (и надеюсь) спонтанная проблема windows.

Мечтайте, сегодня снова та же проблема и на этот раз перезагрузка не решила. Итак, давайте разберемся с этим.

Вот моя реализация:

private void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.D
        && e.Control == true
        && e.Alt == true
        && e.Shift == true)
    {
        // do things
    }
}

Как я уже упоминал, до частого использования он работал надежно.

Что я обнаружил до сих пор заключается в том, что нажатие клавиш Ctrl + Alt + Shift по очереди вызывает функцию «MainWindow_KeyDown» каждый раз, как и ожидалось. При нажатии кнопки D эта функция больше не запускается, что является неожиданным (при нажатии только D эта функция вызывается).

Удаление одного из Клавиши «option», похоже, работают (например, Ctrl + Alt + D ). Но как только я нажимаю все три клавиши выбора (т.е. Ctrl + Alt + Shift ), он не реагирует на нажатие других клавиш.

Почему функция «MainWindow_KeyDown» не реагирует («больше») на D (или любой другой), когда Ctrl + Alt + Shift уже нажаты?

Обходной путь q & d заключался в замене

e.KeyCode == Key.D

на

Keyboard.IsKeyDown(Key.D) == true

Это работает, пока D не последняя нажатая клавиша (потому что, как описано выше, она не войдет в эту функцию при нажатии клавиш Ctrl + Alt + Shift уже).

Я также пробовал следующую реализацию с тем же (отрицательным) результатом:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.Control | Keys.Alt | Keys.Shift | Keys.D))
    {
        MessageBox.Show("Short cut found");
        return true;
}
    return base.ProcessCmdKey(ref msg, keyData);
}

Кто-нибудь, кто испытывал нечто подобное? Большое спасибо за любой вклад.

1 Ответ

0 голосов
/ 07 августа 2020

У меня была такая же проблема, и у меня сработали следующие 2 шага:

  1. Go в Диспетчер устройств -> Клавиатуры -> Щелкните правой кнопкой мыши клавиатуру (а) -> Удалить устройство - > Перезагрузите компьютер.
  2. Некоторые программы портят этот конкретный c ярлык, в моем исследовании я видел людей, у которых он работал, просто закрывая Microsoft Teams, Cortana или Skype. У меня сработало выход из Skype.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...