UWP не может получить правильное состояние виртуального ключа после переключения из другого приложения - PullRequest
0 голосов
/ 06 марта 2020

У меня есть диалоговое окно входа в систему, которое я хотел бы показать пользователю при включенной функции Caps Lock. Я добавляю следующий код, чтобы проверить текущее состояние ключа VirtualKey.CapitalLock, чтобы определить, должно ли сообщение отображаться или нет, когда PasswordBox имеет фокус.

private bool IsCapsLockOn() {
    // check caps lock key state
    var keystate = Window.Current.CoreWindow.GetKeyState(VirtualKey.CapitalLock);
    return (keystate & CoreVirtualKeyStates.Locked) != 0 ;
}

Эта функция работает нормально, но CoreWindow.GetKeyState не будет быть в состоянии получить правильное заблокированное состояние, выполнив следующие действия:

  1. Включить Caps Lock во включенное состояние
  2. IsCapsLockOn () возвращает true
  3. Переключить фокус на другое приложение или Рабочий стол
  4. Переключитесь обратно на мое приложение, и ключ CapsLock останется заблокированным, тогда IsCapsLockOn всегда возвращает false, а состояние ключа - CoreVirtualKeyStates.None.
  5. Разблокируйте CapsLock и заблокируйте его снова, чтобы решить проблему. чтобы получить правильное состояние.

Я также протестировал проверку обоих состояний ключей CapitalLock и NumberKeyLock, и оба состояния ключей не смогут получить после шага № 4, когда оба они заблокированы , Проблема исчезнет после того, как один из ключей будет снова разблокирован и заблокирован.

Является ли это поведение ошибкой в ​​UWP? Или для сброса состояния требуется какой-либо другой системный вызов?

Заранее спасибо.

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