Физические и программные нажатия клавиш по-разному обрабатываются .NET или ОС - PullRequest
0 голосов
/ 03 марта 2010

Сначала некоторая справочная информация ...

У меня есть приложение на C # .NET, которое работает на планшетном ПК, то есть без физической клавиатуры. Мы используем экранную клавиатуру, встроенную в Windows XP Tablet Edition, для заполнения элементов управления TextBox в форме. Для формы нет специальной обработки нажатия клавиш (хотя другие компоненты пользовательского интерфейса обрабатывают нажатия клавиш).

Иногда экранная клавиатура перестает регистрировать некоторые нажатия клавиш. Форма все еще имеет фокус, а курсор остается в текстовом поле. Повторное нажатие клавиши в конечном итоге приведет к отображению символа. Наше приложение использует несколько занятых потоков обработки, однако это далеко от 100% загрузки ЦП.

Когда это происходит, оно остается таким до перезапуска нашего приложения, после чего клавиатура ведет себя нормально. Проблема не возникает вообще, когда USB-клавиатура подключена и используется для ввода.

Мне интересно, какие различия существуют между физическими и программными нажатиями клавиш? Генерируют ли программные нажатия аппаратные прерывания, как физическая клавиатура? Может ли .NET обрабатывать каждый тип по-разному?

Буду очень признателен за любые предложения, которые могут помочь отладить проблему!

1 Ответ

0 голосов
/ 03 марта 2010

Я никогда не работал с планшетной версией XP OSK, но я использовал версию XP Embedded. Насколько я могу судить, Windows API отправлял нажатия клавиш приложениям .NET и MFC одинаково. На самом деле, если я правильно помню, у нас не было никакого способа разграничить эти два программно. Насколько я знаю, OSK не будет вызывать аппаратное прерывание, однако код виртуального ключа будет передаваться программам уровня приложения точно так же, как и физический.

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

Если вы еще этого не сделали, я бы проверил, установлены ли на сенсорном экране последние версии драйверов и правильно ли он откалиброван. Я также проверил бы, что OSK имеет все последние обновления от Microsoft.

...