Модификаторы клавиатуры во время запуска приложения
Вопрос
Я хотел зафиксировать, была ли нажата клавиша-модификатор во время запуска приложения (чтобы определить полноэкранный режим или оконный).
В конструкторе главного окна я попытался проверить Клавиатура.Модификаторы перечислите, чтобы увидеть, сброшен ли 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...");
}
}