Не удается отобразить OSK

Я пытаюсь написать настольное приложение, в котором, если я нажму определенные кнопки, появится OSK. Я пытаюсь вызвать его с помощью следующего кода:

System.Diagnostics.Process.Start("osk.exe");

Но каждый раз появляется следующая ошибка:

"Не удалось запустить экранную клавиатуру"

Почему это произошло?

ОБНОВЛЕНИЕ:

Если я изменю режим отладки с любого процессора на 64x, проблема будет решена. Но я хотел бы, чтобы OSK отображалась автоматически при выборе текста в режиме планшета, а также почему есть какой-либо способ заставить OSK режима планшета отображаться?


person Phia-CM    schedule 12.08.2016    source источник
comment
Для каких именно кнопок вы хотите, чтобы OSK отображался? Обычно экранное меню должно появляться, когда <TextBox /> находится в фокусе (и обнаруживается сенсорный экран). Вы сами определяете режим планшета или устройство, которое вы используете, на самом деле является планшетом? Не могли бы вы рассказать нам немного больше о масштабах вашего приложения и о том, чего вы пытаетесь достичь?   -  person Geoff James    schedule 15.08.2016


Ответы (2)


Это мой опыт запуска OSK с помощью System.Diagnostics.Process.Start("osk.exe"). Я тестировал только 64-разрядную версию Windows 7 и 64-разрядную версию Windows 10 с использованием Visual Studio 2015. В двух версиях Windows поведение отличается.

Есть три соответствующих варианта сборки:

  1. Любой ЦП, предпочитать 32-битный флажок (по умолчанию):

В Windows 7 использование osk.exe работает нормально.

В Windows 10 ни один из osk.exe, \Windows\System32\osk.exe или \windows\SysWOW64\osk.exe не работает (вероятно, ваша ситуация).

  1. Любой процессор, предпочитаю 32-битный, не отмечено:

В Windows 7 использование osk.exe работает нормально.

В Windows 10 работает только \Windows\System32\osk.exe.

  1. x64:

В Windows 10 работают файлы osk.exe и \Windows\System32\osk.exe.

Целевая платформа (любой процессор) и флажок «Предпочитать 32-разрядную версию» находятся в свойствах проекта, вкладка «Сборка». По умолчанию установлен флажок Prefer 32-bit (делает исполняемые файлы меньшего размера). Это означает, что приложение, скорее всего, работает в 32-битном режиме в 64-битной системе. В диспетчере задач вы увидите *32 в Windows 7 и (32-разрядная версия) в Windows 10.

Если флажок не установлен, приложение будет работать в 64-битном режиме в 64-битной системе, а вызов \Windows\System32\osk.exe найдет все, что ему нужно. Я не исследовал, почему поведение изменилось в Windows 10, но суть в том, чтобы использовать Any CPU с отключенным Prefer 32-bit и указать полный путь к OSK, то есть \Windows\System32\osk.exe.

\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe запустит TabTip.

person Kenneth Evans    schedule 19.11.2016

Я обнаружил недокументированный COM-интерфейс для управления сенсорной клавиатурой. Проверьте код здесь https://stackoverflow.com/a/40921638/332528

person torvin    schedule 01.12.2016