При попытке запустить экранную клавиатуру в 64-разрядной Windows на 32-разрядной платформе происходит ошибка "Не удалось запустить экранную клавиатуру". Связано это с тем, что Windows переадресовывает все запросы в системные каталоги, в зависимости от разрядности платформы, из которой происходит вызов. Какие бы ключи ни использовались, если вызов из 32-разрядного приложения система переадресует вызов в каталог C:\Windows\SysWOW64 - именно там хранятся 32-разрядные версии приложений и библиотек.
Пример кода, который вызывает ошибку:
ЗапуститьПриложение("osk");
Есть несколько путей решения этой проблемы, например, виртуальный каталог sysnative. В моем случае виртуальный каталог был недоступен. Кроме виртуального каталога при необходимости можно выключать переадресацию для потока. Для включения и отключения переадресаций существуют специальные методы, описаны на MSDN. Этот способ не подходит, потому что у нас не отдельное приложение, а платформа 1с.
Данный код позволяет запустить 64-разрядное системное приложение Windows, независимо от разрядности используемой платформы 1с. Тут мы запускаем проводник, а проводник запускает экранную клавиатуру из каталога C:\Windows\system32 без переадресации. Пример кода для запуска экранной клавиатуры:
ЗапуститьПриложение("explorer.exe C:\Windows\system32\osk.exe");
Результат:
Для 1С 8.3 (протестировано на 8.3.22.2283). Ни платформа, ни конфигурация никакой роли не играет, главное, что управляемое приложение.