none
Вызов экранной клавиатуры в Windows 10 из приложения VB.Net RRS feed

  • Вопрос

  • Windows 10

    Visual Studio 2017

    Приложение на VB.Net вызывает экранную клавиатуру (Process.Start("%windir%\system32\osk.exe")

    Вызов экранной клавиатуры не выполняется, возвращает сообщение:

    "Ошибка при запуске экранной клавиатуры: Не удается найти указанный файл" 

    при этом, osk.exe

    запускается из Power Shell, 

    запускается из System32, но не запускается из другой папки, если скопировать


    Я

    27 февраля 2018 г. 10:41

Ответы

  • Что значит из другой папки? Если вы физически пытаетесь скопировать osk.exe в другую папку, это естественно не работает.

    У меня

    Process.Start("osk");

    Нормально запускает экранную клавиатуру из 64-битного приложения, но не работает из 32-битного.

    Более того, sysnative почему-то не пашет в Windows 10. Не могу понять почему.

    27 февраля 2018 г. 18:40

Все ответы

  • Думаю вам надо заменить %windir% на его значение перед вызовом.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    27 февраля 2018 г. 16:43
    Модератор
  • Думаю вам надо заменить %windir% на его значение перед вызовом.

     - думаете не пробовал, прежде чем писать сюда?

    osk.exe не запускается даже обычным способом из другой папки 


    Я

    27 февраля 2018 г. 17:50
  • Думаю вам надо заменить %windir% на его значение перед вызовом.

     - думаете не пробовал, прежде чем писать сюда?

    osk.exe не запускается даже обычным способом из другой папки 


    Я

    Увы, я не знаю что вы пробовали, а что нет. Я вижу только то что вы написали - и там я вижу неверный путь. Прежде чем я буду делать другие предположения, опишите что то еще вы пробовали.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    27 февраля 2018 г. 18:16
    Модератор
  • Увы, я не знаю что вы пробовали, а что нет. Я вижу только то что вы написали - и там я вижу неверный путь. Прежде чем я буду делать другие предположения, опишите что то еще вы пробовали.


    Пробовал все, что можно, иначе не написал бы

    Путь там верный, но он не работает также, как и путь прописанный явно

    В любом случае ошибка одна - "не найден указанный файл"

     

    Что интересно, если скопировать osk.exe в другую папку, запустить его невозможно


    Если запускать из PowerShell или командной строки - запускается, из батника - запускается, а из кода программы - нет

    Private Sub btnKeyBoard_Click(sender As Object, e As EventArgs) Handles lblKeyBoard.Click
    
            'Dim sOskFile = "%windir%\system32\osk.exe"
            'Dim sOskFile = Environment.SystemDirectory + "\osk.exe"
    
            Try
    
                'With My.Computer.FileSystem
                '    If Not .FileExists(sOskFile) Then
                '        MsgboxDialog("Файл экранной клавиатуры не найден", Me)
                '        Return
                '    End If
                'End With
                Process.Start("%windir%\system32\osk.exe")
    
            Catch ex As Exception
                MsgboxDialog("Ошибка при запуске экранной клавиатуры: " + ex.Message, Me)
            End Try
    
        End Sub





    • Изменено Asur.Vasily 27 февраля 2018 г. 18:45
    27 февраля 2018 г. 18:38
  • Что значит из другой папки? Если вы физически пытаетесь скопировать osk.exe в другую папку, это естественно не работает.

    У меня

    Process.Start("osk");

    Нормально запускает экранную клавиатуру из 64-битного приложения, но не работает из 32-битного.

    Более того, sysnative почему-то не пашет в Windows 10. Не могу понять почему.

    27 февраля 2018 г. 18:40
  • Что значит из другой папки? Если вы физически пытаетесь скопировать osk.exe в другую папку, это естественно не работает.

    У меня

    Process.Start("osk");

    Нормально запускает экранную клавиатуру из 64-битного приложения, но не работает из 32-битного.

    Более того, sysnative почему-то не пашет в Windows 10. Не могу понять почему.

    Вот это интересно

    Т.е. если я делаю в 64 windows 10, неизвестно, будет ли работать в 32?

     Но у меня и в 64х не запускается

    И почему "Файл не найден"?


    Я



    • Изменено Asur.Vasily 27 февраля 2018 г. 18:54
    27 февраля 2018 г. 18:51
  • 64-битные приложения, определенно, не работают на 32-битных системах. 

    Впрочем, 32-битной Windows 10 в природе не существует.

    Если не работает краткий путь, можно использовать полный:

    System.IO.Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Windows),
    
    "System32\\osk.exe");
    В x86 теоретически, вместо System32 должно работать Sysnative. Но не работает. 





    • Изменено VadimTagil 28 февраля 2018 г. 4:16
    27 февраля 2018 г. 19:01
  • Создал новый пустой проект,

    Process.Start("osk")  работает без проблем ....


    Я

    27 февраля 2018 г. 19:27
  • Впрочем, 32-битной Windows 10 в природе не существует.


    Все же она существует. Можете загрузить и проверить самостоятельно:

    https://www.microsoft.com/ru-ru/software-download/windows10



    This posting is provided "AS IS" with no warranties, and confers no rights.

    27 февраля 2018 г. 23:04
    Модератор
  • Да, точно.

    "Process.Start("osk")  работает без проблем "

    x86 или x64 ? У меня на x86 так и не заработало. Только через хак с вызовом 64-битного cmd:

    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = "c:\\windows\\sysnative\\cmd.exe";            
    psi.Arguments = "/k start osk && exit";
    psi.CreateNoWindow = true;
    psi.WindowStyle = ProcessWindowStyle.Hidden;
    Process.Start(psi);

    28 февраля 2018 г. 4:21
  • существует, у меня раньше стояла, обновлялась автоматически, когда MS раздавал


    Я

    28 февраля 2018 г. 7:10
  • windows 10  x64

    создал проект VB по умолчанию, написал в нем 1 строку 

    Process.Start("osk") 

    клавиатура запускается 

    В рабочем проекте, где она нужна, не запускается


    Я

    28 февраля 2018 г. 7:13
  • Я понимаю, что ОС x64 (на х86 бы не было проблемы). Проект под какую архитектуру собираете? (я не знаю, что выбрано по умолчанию в VS 2017)
    28 февраля 2018 г. 7:59
  • стоял на x86, изменил на Any

    Заработало,

    Спасибо


    Я

    28 февраля 2018 г. 8:04