9

現在、Windows 7タブレットで実行されるデスクトップWPFアプリに取り組んでおり、Windows8を搭載したSurfaceProユニットをいくつか追加しています。

TextBoxがフォーカスを受け取ると、小さなキーボードアイコンが表示されなくなることにすぐに気付きました。すべてのTextBoxのMouseDownイベントで「tabtip.exe」を実行することで解決しました。

いくつかの数値テキストボックス(注文のアイテムの数量)があり、数値入力のために画面キーボードを開きたいのですが、デフォルトではqwertyキーで開きます。

tabtip.exeに渡して入力モードを変更できるコマンドライン引数を広範囲に検索してきましたが、うまくいきませんでした。これはメトロスタイルアプリでは簡単な作業のように見えますが、デスクトップ側では不可能です。

これを実現するために使用できるtabtip.exeへのコマンドライン引数はありますか?

4

4 に答える 4

10

提供された回答@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;
            }
        }
    }
}
于 2014-07-16T09:32:58.027 に答える
9

HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7(Windows 8)で、のREG_DWORD値を変更します。KeyboardLayoutPreference0通常のレイアウト値は1、中央に数字パッドがある分割キーボードです。

REG_DWORDLastUsedModalityWasHandwritingもである必要があります。そうで0ない場合1は、タブチップを再度開始すると、ペンの手書き領域で開きます。

于 2013-07-06T06:51:36.127 に答える
1

Tabtipのレジストリ設定により、入力モードを制御できます。KeyboardLayoutPreferenceという名前のレジストリエントリを探します。

于 2013-04-16T11:33:21.027 に答える
1

私はwin8を使用したことがありませんが、win 10では、InputScopeを使用して、使用するオンスクリーンキーボードを制御できます。

<TextBox Grid.Row="0"
         InputScope="Number" />
<TextBox Grid.Row="1"
         InputScope="Default" />
于 2016-06-20T00:06:40.007 に答える