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

Сначала немного справочной информации...

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

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

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

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

Любые предложения, которые могут помочь отладить проблему, будут высоко оценены!


person malloc    schedule 03.03.2010    source источник


Ответы (1)


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

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

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

person adam    schedule 03.03.2010