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

Обновлено: 03.07.2024

90% времени я не могу запустить osk.exe от 32бит процесс о Win7 x64 . Первоначально код просто использовал:

который не будет работать на x64 из-за виртуализации каталогов. Не проблема, я думал, я просто отключу виртуализацию, запустите приложение и включите его снова, что я мысль - это правильный способ делать вещи. Я также добавил код, чтобы вернуть клавиатуру, если она была свернута (что отлично работает) - код (в пример приложения WPF) теперь выглядит следующим образом:

но этот код, большую часть времени, бросает следующее исключение на osk.Start() :

не удалось найти указанную процедуру в системе.Диагностика.Процесс.StartWithShellExecuteEx (ProcessStartInfo startInfo)

Я пробовал положить длинную нить.Команды сна вокруг osk.Линия старта, просто чтобы убедиться, что это не гонки, но та же проблема сохраняется. Может ли кто-нибудь заметить где я делаю что-то неправильно, или обеспечить альтернативное решение для этого? Это кажется чтобы работать нормально запуск Блокнота, он просто не будет играть в мяч с экранной клавиатурой.

обходным путем для этого является установка ProcessStartInfo.Значение свойства useshellexecute значение false. Здесь он тебе не нужен.

очевидно, что отключение перенаправления является рискованным подходом с побочными эффектами, которые вы не можете предсказать. Есть много DLL, которые загружаются по требованию. Очень маленький помощник EXE, который вы компилируете с платформой Target = любой процессор может решить вашу проблему.

некоторые вещи происходят под капотом, которые требуют, чтобы вы начали osk.exe из потока MTA. Причина, кажется, в том, что призыв к Wow64DisableWow64FsRedirection влияет только на текущий поток. Однако, при определенных условиях Process.Start создать новый процесс из отдельного потока, например, когда UseShellExecute имеет значение false, а также при вызове из потока STA, как кажется.

код ниже проверяет состояние квартиры, а затем обязательно запускает экран Клавиатура из потока MTA:

в частности, я пробовал его на Win7 x64 и WinXP 32 бит до сих пор, и он работает.

запустите этот пакетный файл сбоку (запускается из 64-битного проводника):

создать файл oskstart.tmp, когда вам нужна клавиатура

Cambiar Лас-сайт propiedades-де-ла aplicación. COMPILAR-Desmarcar проверить preferencia 32 бит.

изменить свойства приложения Compila-снимите флажок 'BEST 32 BITS' (или аналогичный)

вы можете прочитать это:

или сделать другое приложение с этой опции и обед (run) из вашего основного приложения.

для тех, кто сталкивается "не удалось запустить экранную клавиатуру.", измените цель платформы вашего проекта на любой процессор.

Читайте также: