В Windows 10 есть настройка «Показывать сенсорную клавиатуру, когда она не находится в режиме планшета, и клавиатура не подключена», что позволяет Windows отображать сенсорную клавиатуру при каждом касании текстового поля.
Поскольку Windows обрабатывает эту логику довольно плохо (она легко нарушается в приложениях WPF), я хотел бы отключить эту опцию для своего приложения, что я пытаюсь сделать, изменив значение реестра EnableDesktopModeAutoInvoke
, соответствующее этому опция (простой Registry.SetValue
метод). Но есть проблема - приложение с сенсорной клавиатурой TabTip.exe
по какой-то причине не «подцепляет» изменения в реестре и продолжает показывать сенсорную клавиатуру до ее перезапуска. И наоборот - после восстановления значения реестра мне нужно перезапустить приложение, чтобы применить изменения.
И именно здесь возникает основная проблема такого подхода - при включенной опции автозапуска после запуска процесса TabTip сразу отображается клавиатура. Очевидно, я не хотел бы таких визуальных побочных эффектов для логики моего приложения.
Другой момент заключается в том, что при изменении этого параметра обычным способом через приложение «Настройки Windows» вкладка «Tab» или любые другие связанные приложения или службы не перезапускаются. Это означает, что приложению Настройки каким-то образом удается обновить процесс TabTip. Мне бы очень хотелось понять, как это происходит, и могу ли я воспроизвести такое же поведение в C #, но я понятия не имею, как это сделать.
Итак, мой вопрос - как я могу программно изменить либо значение реестра EnableDesktopModeAutoInvoke
, либо параметр «Показывать сенсорную клавиатуру, когда не в режиме планшета, и клавиатура не подключена», и заставить приложение TabTip принимать это изменение без любые возможные визуальные побочные эффекты?
UPD:
Я знаю, что можно заставить клавиатуру игнорировать текстовое поле, создав пользовательское текстовое поле с определенным одноранговым узлом автоматизации, но для этого потребуется заменить все текстовые поля во всем приложении, и всегда помнить, что нам нужно использовать новые текстовые поля, так что это не жизнеспособное решение. Я попытался удалить возможность получения пиров автоматизации для детей основного окна, но это не работает.