Приложение Windows 8 для настольных ПК: откройте файл tabtip.exe на дополнительной клавиатуре (для числового текстового поля)

Мы работаем над настольным WPF- приложением, которое работает на планшетах с Windows 7, и добавляем к нему несколько устройств Surface Pro с Windows 8.

Мы сразу заметили, что маленький значок клавиатуры больше не отображается, когда TextBox получает фокус. Мы решили это, запустив "tabtip.exe" в событии MouseDown для всех текстовых полей.

У нас есть несколько числовых текстовых полей (количество для элемента в заказе), и мы хотим открыть экранную клавиатуру для ввода чисел, но она открывается по умолчанию с помощью клавиш qwerty.

Я интенсивно искал любые аргументы командной строки, которые я могу передать tabtip.exe, чтобы изменить его режим ввода, но мне не повезло. Это кажется тривиальной задачей с приложением в стиле metro, но невозможно на настольном компьютере.

Есть ли аргумент командной строки для tabtip.exe, который я могу использовать для этого?

4 ответа

Решение

В HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7 (Windows 8) измените REG_DWORD KeyboardLayoutPreferenceценность 0 является обычным значением макета 1 раскладная клавиатура с цифровой панелью посередине

REG_DWORD LastUsedModalityWasHandwriting также должен быть 0 или если 1, когда вкладка снова запускается, она открывается с областью рукописного ввода.

Следуя предоставленному ответу @tymes, вот быстрое консольное приложение, которое демонстрирует открытие клавиатуры и изменение различных настроек (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;
            }
        }
    }
}

Вы можете управлять режимом ввода с помощью настроек реестра для Tabtip. Найдите запись в реестре с именем KeyboardLayoutPreference.

Я никогда не использовал win 8, но в win 10 вы можете использовать InputScope для управления тем, какая экранная клавиатура используется:

<TextBox Grid.Row="0"
         InputScope="Number" />
<TextBox Grid.Row="1"
         InputScope="Default" />
Другие вопросы по тегам