Я использую реализацию, которая реагирует на одновременное нажатие клавиш 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);
}
Кто-нибудь, кто испытывал нечто подобное? Большое спасибо за любой вклад.