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

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

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

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

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

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


person Matthew Fotzler    schedule 26.03.2013    source источник


Ответы (4)


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

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

person tymes    schedule 06.07.2013
comment
фантастика! Этого DWORD у меня еще не было в реестре, поэтому мне пришлось его создать. Но это определенно дает желаемый эффект. - person Matthew Fotzler; 08.08.2013
comment
Это отлично работает на компьютерах с Windows 8, но в Windows 10 TabTip.exe, похоже, сбрасывает все настройки реестра при его открытии. - person jaredbaszler; 27.10.2015
comment
@jaredbaszler Windows 10 открывает handwriting-view, когда присутствует стилус, в противном случае — режим ввода. До сих пор я не нашел возможности начать с handwriting-view, когда нет стилуса. - person Michael Mairegger; 15.04.2016

Следуя предоставленному ответу @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;
            }
        }
    }
}
person Barrie    schedule 16.07.2014
comment
Привет, Барри, ты знаешь, как получить все регистрационные имена ключей для TabTip? Я пытаюсь получить ключ для включения заглавных букв при открытии KeyBoard... Спасибо. - person Guillaume; 23.11.2015
comment
Перед отображением экранной клавиатуры вы можете имитировать нажатие клавиши Caps Lock, если она еще не включена. думаю должно сработать - person Barrie; 24.11.2015
comment
Основной подход к проверке блокировки заглавных букв и последующему включению описан здесь и здесь - person Barrie; 24.11.2015

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

person Sławomir Leszczyński    schedule 16.04.2013
comment
Я сделал поиск в regedit для этого ключа и не получил никаких результатов. Я не мог найти никаких результатов в Google об этом. Где находится этот ключ в реестре и какие у него значения? - person Matthew Fotzler; 16.04.2013

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

<TextBox Grid.Row="0"
         InputScope="Number" />
<TextBox Grid.Row="1"
         InputScope="Default" />
person Johan Larsson    schedule 20.06.2016