Bureau de Windows 8 Application: Ouvrez tabtip.exe secondaire clavier (numérique zone de texte)
nous travaillons sur une application WPF de bureau qui fonctionne sur les tablettes Windows 7 et qui ajoute des unités Pro de Surface avec windows 8 au mix.
nous avons remarqué immédiatement que la petite icône de clavier n'apparaît plus lorsqu'une boîte de texte reçoit la mise au point. Nous l'avons résolu en lançant "tabtip.exe" sur l'événement MouseDown pour toutes les zones de texte.
nous avons quelques boîtes de texte numériques cependant (quantité pour un article sur une commande), et veulent ouvrir le clavier à l'écran pour la saisie numérique, mais il s'ouvre avec les touches qwerty par défaut.
j'ai cherché beaucoup d'arguments en ligne de commande que je peux passer à tabtip.exe pour changer son mode d'entrée, mais n'ont pas eu de chance. Cela semble comme une tâche triviale avec une application de style metro, mais impossible du côté du bureau.
Est-il un argument de ligne de commande pour tabtip.exe je peux utiliser pour accomplir cette?
4 réponses
dans HKEY_CURRENT_USER\Software\Microsoft\TabletTip.7
(Windows 8)
modifier le REG_DWORD KeyboardLayoutPreference
valeur de 0
est la disposition régulière
valeur de 1
est le clavier fractionné avec le numéro au milieu
REG_DWORD LastUsedModalityWasHandwriting
doit également être 0
ou si 1
, quand tabtip est démarré à nouveau, il sera ouvert du stylet sur la zone d'écriture.
suite à la réponse @tymes fournie, voici une application Quick console qui montre comment ouvrir le clavier et changer les différents paramètres (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;
}
}
}
}
vous pouvez contrôler le mode d'entrée en définissant le Registre pour Tabtip. Recherchez l'entrée du registre avec le nom KeyboardLayoutPreference.
Je n'ai jamais utilisé win 8 mais dans win 10 vous pouvez utiliser InputScope pour contrôler ce que le clavier à l'écran est utilisé:
<TextBox Grid.Row="0"
InputScope="Number" />
<TextBox Grid.Row="1"
InputScope="Default" />