Модификаторы клавиатуры во время запуска приложения - PullRequest
2 голосов
/ 29 апреля 2009

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

В конструкторе главного окна я попытался проверить перечисление Keyboard.Modifiers , чтобы убедиться, что Shift не работает. Всегда показывалось «Нет».

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

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

Ответы [ 3 ]

1 голос
/ 29 апреля 2009

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();
    }
}
0 голосов
/ 05 марта 2018

Отлично резюме ... во второй ссылке есть отличный код, чтобы показать его в процессе ... Просто добавьте код Джоша Дж (из ответа в этом вопросе к проекту во второй ссылке):

В конструкторе 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...");
    }
}
0 голосов
/ 29 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...