а) Нет, они полностью совместимы. Перехват клавиатуры происходит на уровне кенеля, поэтому все, что использует сообщение клавиатуры, будет проходить через него, будь то исходный или управляемый код.
b) Трудно сказать, так как мы не видим вашу реализацию
в) Это возможно (что угодно, так как почти все в CE может быть изменено OEM), но не очень вероятно. Большинство OEM-производителей не очень-то привыкли к GWES (что и лежит), потому что он работает «из коробки».
Теперь конкретная часть, на которую вы смотрите, я полагаю, относится к вызову TouchCalibrate, верно? Лучше всего обратить особое внимание на исходный код TouchCalibrate - он поставляется с Platform Builder (включая версию eval).
Я предполагаю, что он "перехватывает" или, по крайней мере, препятствует отправке сообщений. Прошло довольно много времени с тех пор, как я был там, и это было во время работы драйвера сенсорной панели, поэтому я не особо задумывался об обработке клавиатуры, но что она делает, передает контроль над подсистемой GWES, чтобы посмотреть на необработанные точки сенсорной панели - это не работает приложение Windows. Таким образом, вполне вероятно, что насос сообщений приложения, который обрабатывает диспетчеризацию этих нажатий клавиш, ничего не делает (например, когда вы запускаете модальное диалоговое окно).
Мне действительно нужно лучшее объяснение того, что именно происходит. Вы говорите «когда выходите из отладчика после запуска этого экрана», но мне не ясно, что это значит. Вы имеете в виду, что вы вызываете TouchCalibrate в коде, затем прекращаете отладку и затем отправляете сообщения, или они отправляются после закрытия самого экрана TouchCalibrate?
Remote Spy ++ или Kernel Tracker могут также дать некоторое представление о том, что происходит.