After killing the process for TabletKeyboard(TabTip.exe) application doesn't bring back to its original size in wpf

后端 未结 2 392
遇见更好的自我
遇见更好的自我 2020-12-16 06:10

I have a wpf application which runs on the windows 8 tablet . And in order to bring the keyboard for typing when the focus is on any TextBox.

I am invok

2条回答
  •  北海茫月
    2020-12-16 06:34

    The Windows 8 keyboard has a number of rendering problems. These can be mitigated by starting the keyboard in its smaller mode (equivalent to hitting the minimize button). It plays much better with WPF then, actually minimizing and expanding when the process is launched and closed.

    This requires launching the process in this mode, and closing it in a nicer way than you are doing right now

    Include these libraries:

    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Interop;
    

    And define this external functions:

    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
    
    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(String sClassName, String sAppName);
    

    Open the keyboard with:

    public static void openKeyboard()
        {
            ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe");
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            myProcess = Process.Start(startInfo);
        }
    

    and close it with:

    public static void closeKeyboard()
        {
            uint WM_SYSCOMMAND = 274;
            uint SC_CLOSE = 61536;
            IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
            PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
        }
    

    This will give you the best behaved windows 8 on screen keyboard you can get. With any luck it will fix your rendering issues.

提交回复
热议问题