У меня есть диалоговое окно входа в систему, которое я хотел бы показать пользователю при включенной функции 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 не будет быть в состоянии получить правильное заблокированное состояние, выполнив следующие действия:
- Включить Caps Lock во включенное состояние
- IsCapsLockOn () возвращает true
- Переключить фокус на другое приложение или Рабочий стол
- Переключитесь обратно на мое приложение, и ключ CapsLock останется заблокированным, тогда IsCapsLockOn всегда возвращает false, а состояние ключа - CoreVirtualKeyStates.None.
- Разблокируйте CapsLock и заблокируйте его снова, чтобы решить проблему. чтобы получить правильное состояние.
Я также протестировал проверку обоих состояний ключей CapitalLock и NumberKeyLock, и оба состояния ключей не смогут получить после шага № 4, когда оба они заблокированы , Проблема исчезнет после того, как один из ключей будет снова разблокирован и заблокирован.
Является ли это поведение ошибкой в UWP? Или для сброса состояния требуется какой-либо другой системный вызов?
Заранее спасибо.