Управление Windows на экранной клавиатуре в C # - PullRequest
1 голос
/ 05 апреля 2019

В моих приложениях реализована Windows-клавиатура:

    [ComImport, Guid("4ce576fa-83dc-4F88-951c-9d0782b4e376")]
    class UIHostNoLaunch
    {
    }

    [ComImport, Guid("37c994e7-432b-4834-a2f7-dce1f13b834b")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface ITipInvocation
    {
        void Toggle(IntPtr hwnd);
    }

    [DllImport("user32.dll", SetLastError = false)]
    static extern IntPtr GetDesktopWindow();

    public static void ShowWindowsKeyboard()
    {
        var uiHostNoLaunch = new UIHostNoLaunch();
        var tipInvocation = (ITipInvocation)uiHostNoLaunch;            
        tipInvocation.Toggle(GetDesktopWindow());           
        Marshal.ReleaseComObject(uiHostNoLaunch);
    }

Клавиатура отображается с помощью функции переключения, мой вопрос - можете ли вы заставить клавиатуру появляться с определенной функцией иисчезнуть с другой функцией вместо использования переключателя?

Например, textbox_OnGotFocus (EventArgs e) {некоторый код, который делает клавиатуру видимой} textBox_OnLostFocus (EventArgs e) {некоторый код, который делает клавиатуру исчезающей}

1 Ответ

1 голос
/ 10 апреля 2019

Как насчет этого:

    static readonly string OnScreenKeyboardProgramName = "osk";

    public static void StartOnScreenKeyboard()
    {
        System.Diagnostics.Process.Start(OnScreenKeyboardProgramName);
    }

    public static void StopOnScreenKeyboard()
    {
        System.Diagnostics.Process[] processes = 
            System.Diagnostics.Process.GetProcessesByName(OnScreenKeyboardProgramName);

        if (processes.Length > 0)
        {
            processes[0].Kill();
            processes[0].WaitForExit();
            processes[0].Dispose();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...