Захват окна ключ в c # (wpf) - PullRequest
       11

Захват окна ключ в c # (wpf)

6 голосов
/ 20 апреля 2009

Я написал небольшую программу, отображающую звуки и изображения на экране при нажатии любой кнопки. Я всегда начинаю это, когда один из моих маленьких детей ползет ко мне на колени и начинает нажимать на клавиши, конечно же, случайно.

Работает нормально, за исключением двух клавиш, одна из которых - переключатель ВКЛ / ВЫКЛ, другая - клавиша Windows. (я полагаю, что это эквивалент CTRL-ESC) Я могу перехватить его при нажатии, но только после того, как будет показано стартовое меню.

Событием, которое я использую, является UIElement.KeyDown, и все, что я мог придумать, это: (это KeyEventArgs)

            if (e.Key == Key.LWin) e.Handled = true;

но боюсь, что окно запуска уже показывает.

У меня уже есть 1 ответ, но очень хотелось бы узнать, есть ли поддержка wpf?

Я подозреваю, что программирование главного выключателя может быть невозможным? В противном случае, любая помощь там будет приветствоваться ..

Ответы [ 2 ]

18 голосов
/ 20 апреля 2009

Вам понадобится клавиатурный крюк . К сожалению, это должно быть сделано с P / Invoke; это невозможно сделать с помощью управляемого кода.

Проверьте Baby Smash! Скотт Хансельман. Он размещен на code plex в http://www.codeplex.com/babysmash Github в https://github.com/shanselman/babysmash

В качестве альтернативы, посмотрите ShapeShow на CodeProject, который похож.

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

См. http://msdn.microsoft.com/en-us/library/system.windows.input.key(v=VS.90).aspx

Внизу вы увидите простой пример, я думаю, что вы ищете что-то вроде этого:

левая клавиша Windows: System.Windows.Input.Key.LWin

правая клавиша Windows: System.Windows.Input.Key.RWin

пример:

private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.LWin) {
        textBlock1.Text = "You Entered: " + textBox1.Text;
    }
}
...