Модификаторы клавиатуры во время запуска приложения

StackOverflow https://stackoverflow.com/questions/802703

  •  03-07-2019
  •  | 
  •  

Вопрос

Я хотел зафиксировать, была ли нажата клавиша-модификатор во время запуска приложения (чтобы определить полноэкранный режим или оконный).

В конструкторе главного окна я попытался проверить Клавиатура.Модификаторы перечислите, чтобы увидеть, сброшен ли Shift.Он всегда показывал "Нет".

Поэтому я попробовал другой подход, начав с Таймер отправки и проверяет наличие сдвига в своем событии Tick.Кажется, это работает нормально.

Вопрос в том, является ли это лучшим (единственным) способом сделать это?И почему модификатор не возвращает правильное значение в конструкторе window?

Это было полезно?

Решение

Keyboard.Modifiers это правильный класс / свойство для использования.

Я бы предложил проверить модификаторы в обработчике на наличие FrameworkElement.Loaded событие.

В Window конструктор после InitializeComponent():

this.Loaded += new RoutedEventHandler(Window_Loaded);

И:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    // Examine Keyboard.Modifiers and set fullscreen/windowed
    if ((Keyboard.Modifiers & ModifierKeys.Shift) > 0)
    {
        //SetFullscreen();
    }
}

Другие советы

Бьюсь об заклад Keyboard.Modifiers использует GetKeyState под прикрытием, которое, вероятно, не сработает до тех пор, пока ваш цикл сообщений не отправит свое первое сообщение. GetAsyncKeyState будет работать для вас (я думаю, через P / Invoke, если только нет .net-способа вызвать это, о котором я не знаю).

Великий Краткие сведения...вторая ссылка содержит отличный код, чтобы показать это в процессе...Просто добавьте код Джоша Джи (из ответа на этот вопрос в проект по второй ссылке) :

В конструкторе Window после InitializeComponent():

this.Loaded += new RoutedEventHandler(Window_Loaded);

И:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    // Examine Keyboard.Modifiers and set fullscreen/windowed
    if ((Keyboard.Modifiers & ModifierKeys.Shift) > 0)
    {
        MessageBox.Show("The Window is Shifty...");
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top