Windows 8 Desktop App: Open tabtip.exe to secondary keyboard (for numeric textbox)

前端 未结 4 1298
不知归路
不知归路 2020-12-05 12:11

We\'re working on a desktop WPF app that runs on Windows 7 tablets and are adding some Surface Pro units with windows 8 to the mix.

We noticed immed

相关标签:
4条回答
  • 2020-12-05 12:34

    I've never used win 8 but in win 10 you can use InputScope to control what on-screen keyboard is used:

    <TextBox Grid.Row="0"
             InputScope="Number" />
    <TextBox Grid.Row="1"
             InputScope="Default" />
    
    0 讨论(0)
  • 2020-12-05 12:50

    in HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7 (Windows 8) change the REG_DWORD KeyboardLayoutPreference value of 0 is the regular layout value of 1 is the split keyboard with the numberpad in the middle

    the REG_DWORD LastUsedModalityWasHandwriting also has to be 0 or if 1, when tabtip is started again it will open with the pen handwriting area.

    0 讨论(0)
  • 2020-12-05 12:52

    Following on from the answer @tymes provided, here is a quick console app which demonstrates opening the keyboard and changing various settings (C#).:

    using System;
    using System.Diagnostics;
    using Microsoft.Win32;
    
    namespace CSharpTesting
    {
        class Program
        {
            /// <summary>
            /// The different layout types on the virtual keyboard.
            /// </summary>
            public enum KeyboardLayoutMode
            {
                Default,
                ThumbLayout,
                Handwriting
            }
    
            /// <summary>
            /// The registry key which holds the keyboard settings.
            /// </summary>
            private static readonly RegistryKey registryKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\TabletTip\\1.7");
    
            static void Main(string[] args)
            {
                SetKeyboardDockedMode(true);
                SetKeyboardLayoutMode(KeyboardLayoutMode.ThumbLayout);
                ShowKeyboard(true);
            }
    
            /// <summary>
            /// Shows the onscreen keyboard.
            /// </summary>
            /// <param name="killExistingProcess">If true, kill any existing TabTip.exe process.</param>
            public static void ShowKeyboard(bool killExistingProcess)
            {
                if (killExistingProcess)
                {
                    // If the user presses the close button on the keyboard then TabTip.exe will still run in the background. If we have made registry
                    // changes to the keyboard settings, they don't take effect until the process is started again so killing this ensures the keyboard
                    // will open with our new settings.
                    foreach (var process in Process.GetProcessesByName("TabTip"))
                    {
                        process.Kill();
                    }
                }
    
                string onScreenKeyboardPath = @"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe";
                Process.Start(onScreenKeyboardPath);
            }
    
            /// <summary>
            /// Sets if the keyboard is in docked or floating mode.
            /// </summary>
            /// <param name="isDocked">If true set to docked, if false set to floating.</param>
            private static void SetKeyboardDockedMode(bool isDocked)
            {
                registryKey.SetValue("EdgeTargetDockedState", Convert.ToInt32(isDocked), RegistryValueKind.DWord);
            }
    
            /// <summary>
            /// Changes the layout mode of the keyboard.
            /// </summary>
            /// <param name="mode">The layout mode to use.</param>
            private static void SetKeyboardLayoutMode(KeyboardLayoutMode mode)
            {
                switch (mode)
                {
                    case KeyboardLayoutMode.Handwriting:
                        registryKey.SetValue("KeyboardLayoutPreference", 0, RegistryValueKind.DWord);
                        registryKey.SetValue("LastUsedModalityWasHandwriting", 1, RegistryValueKind.DWord);
                        break;
                    case KeyboardLayoutMode.ThumbLayout:
                        registryKey.SetValue("KeyboardLayoutPreference", 1, RegistryValueKind.DWord);
                        registryKey.SetValue("LastUsedModalityWasHandwriting", 0, RegistryValueKind.DWord);
                        // 0 = small, 1 = medium, 2 = large
                        registryKey.SetValue("ThumbKeyboardSizePreference", 2, RegistryValueKind.DWord);
                        break;
                    default:
                        registryKey.SetValue("KeyboardLayoutPreference", 0, RegistryValueKind.DWord);
                        registryKey.SetValue("LastUsedModalityWasHandwriting", 0, RegistryValueKind.DWord);
                        break;
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-05 12:59

    You may control input mode by registry setting for Tabtip. Look for the registry entry with name KeyboardLayoutPreference.

    0 讨论(0)
提交回复
热议问题