Отключить автоматическое открытие сенсорной клавиатуры (TabTip.exe) в текстовом поле в Windows 10, обновление за апрель 2018 г.

У меня есть приложение WPF, написанное на .NET 4.6.1, которое используется на планшетах. Когда я фокусирую текстовое поле, виртуальная клавиатура TabTip автоматически вызывается, когда:

  • включен режим планшета и фокусировка производится касанием или стилусом
  • режим планшета выключен, включена настройка Show the touch keyboard when not in tablet mode and there's no keyboard attached и фокусировка осуществляется касанием или стилусом
  • выключен режим планшета, отключена настройка Show the touch keyboard when not in tablet mode and there's no keyboard attached и фокусировка осуществляется стилусом (не сенсорным)

Мне нужно отключить это поведение.

До сих пор я использовал следующий обходной путь для отключения автоматического вызова клавиатуры:

class MyTextBox : TextBox
{
    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return new FrameworkElementAutomationPeer(this);
    }
}

Начиная с Windows 10 версии 1803 (обновление за апрель 2018 г.) - возможно, даже с 1709 (обновление Fall Creators), но я не могу подтвердить это сейчас - это больше не работает, и клавиатура всегда вызывается.

Есть ли способ, как я могу предотвратить автоматическое отображение TabTip в новейшей версии Windows 10 в моем приложении?

Хотя это не идеально (это влияет на всю систему), я также попытался отключить Touch Keyboard and Handwriting Panel Service, как описано здесь. Но на 1803 служба продолжает запускаться, как только вызывается клавиатура, например. с помощью кнопки панели задач.


person Stalker    schedule 28.06.2018    source источник
comment
Должна ли остальная часть системы по-прежнему использовать клавиатуру? После некоторой игры с tabtip.exe, это совершенно нормальный exe с некоторой логикой «единственного экземпляра». Если вы можете убить его для всей системы, вы можете заменить tabtip.exe на DoesNothing.exe. Я экспериментирую с запуском Process.GetProcessesByName(TabTip)(0).Kill() в каждом текстовом поле getfocus: P   -  person Davesoft    schedule 28.06.2018
comment
Да, остальная часть системы должна по-прежнему иметь возможность использовать клавиатуру. В идеале мне нужно отключить его только в моем приложении. Как-то приемлемое решение: отключить автопоказ во всей системе, но пользователь все равно должен иметь возможность вручную вызывать клавиатуру (через кнопку на панели задач). Убить процесс TabTip на getfocus, конечно, можно, но выглядит это некрасиво (мигает клавиатура). Я все еще надеюсь, что есть лучший способ.   -  person Stalker    schedule 28.06.2018