Как определить, включена ли блокировка Caps в приложении Silverlight? - PullRequest
5 голосов
/ 09 апреля 2009

На экране входа в приложение Silverlight мне нужно определить, включена ли функция Caps Lock. Это достаточно просто, обрабатывая событие KeyUp или KeyDown, однако как определить, включено ли оно или нет, даже если клавиша не была нажата?

Причина, по которой я хочу это сделать, заключается в том, что если пользователь не нажимает Caps Lock во время работы приложения Silverlight, а вместо этого переключает его еще до того, как попадает на экран входа? Мне все еще нужно предупредить их, что заглушка включена.

Очевидно, что обработка неуправляемого кода невозможна в Silverlight, поэтому следующее не работает.

[DllImport ( "user32.dll")] внутреннее статическое внешнее короткое GetKeyState (int keyCode);

Ответы [ 3 ]

4 голосов
/ 09 апреля 2009

Способ обнаружения CAPS LOCKS - проверить KeyValue и Shift KeyEventArgs.
если KeyValue (например) 'A', но Shift ложно, то CAPS LOCKS включен.
Не лучшим способом, но его , как это делают приложения ajax .

0 голосов
/ 09 апреля 2009

Silverlight не поддерживает вызов Win32 DLL на стороне клиента. Таким образом, вы не можете использовать вышеуказанную технику, чтобы проверить, нажата ли кнопка Capslock. Вы пытались использовать событие KeyDown и тестировать системные ключи? Я этого не делал, но это догадка.

0 голосов
/ 09 апреля 2009

Насколько я знаю, ты не можешь. Возможно, вам удастся подобрать ключ, идущий вверх и вниз из вашего приложения, но вы не будете знать, в каком состоянии он находился, если пользователи покидают ваше приложение.

Я не заметил никакой дополнительной поддержки в SL3, но не могу сказать, что я особенно искал это.

...