2013-03-26 15 views
8

Stiamo lavorando a un'applicazione desktop desktop WPF che viene eseguita su tablet Windows 7 e stiamo aggiungendo alcune unità di Surface Pro con Windows 8 al mix .App per desktop di Windows 8: apri tabtip.exe alla tastiera secondaria (per casella di testo numerica)

Abbiamo notato immediatamente che la piccola icona della tastiera non viene più visualizzata quando un TextBox riceve lo stato attivo. L'abbiamo risolto eseguendo "tabtip.exe" sull'evento MouseDown per tutti i TextBox.

Abbiamo alcune caselle di testo numeriche (quantità per un articolo su un ordine) e vogliamo aprire la tastiera su schermo per l'immissione numerica, ma si apre con le chiavi qwerty per impostazione predefinita.

Ho cercato estesamente per qualsiasi argomento della riga di comando che posso passare a tabtip.exe per cambiare la sua modalità di inserimento, ma non ho avuto fortuna. Questo sembra un compito banale con un'app in stile metro, ma impossibile dal lato desktop.

Esiste un argomento della riga di comando su tabtip.exe che posso utilizzare per ottenere questo risultato?

risposta

8

in HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7 (Windows 8) cambiare il REG_DWORD KeyboardLayoutPreference valore 0 è il normale valore di layout di del 1 è la tastiera split con il numberpad in mezzo

il REG_DWORD LastUsedModalityWasHandwriting deve anche essere 0 o se 1, quando si riavvia il tasto Tab si aprirà con l'area di scrittura a penna.

+0

fantastico! Questo DWORD non esisteva già nel registro per me, quindi ho dovuto crearlo. Ma ha sicuramente l'effetto desiderato. –

+0

Funziona alla grande per i computer con Windows 8 ma in Windows 10 il TabTip.exe sembra ripristinare tutte le impostazioni del registro quando viene aperto. – jaredbaszler

+1

@jaredbaszler Windows 10 apre 'handwriting-view' quando è presente uno stilo, la vista di digitazione, altrimenti. Fino ad ora non ho trovato alcuna possibilità di iniziare con 'handwriting-view' quando non è presente lo stilo. –

1

È possibile controllare la modalità di immissione mediante l'impostazione di registro per Tabtip. Cerca la voce di registro con il nome KeyboardLayoutPreference.

+1

ho fatto una ricerca nel regedit per quella chiave e ha ricevuto alcun risultato. Non sono riuscito a trovare alcun risultato su Google a riguardo. Dove entra questa chiave nel registro e quali sono alcuni valori per questo? –

9

seguito delle @tymes risposta fornita, ecco un rapido console app che dimostra l'apertura della tastiera e cambiare le varie impostazioni (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

Ciao Barrie, sai come ottenere tutto il registro Nome chiave per TabTip? Sto cercando di ottenere una chiave per abilitare i tappi quando KeyBoard Open ... Grazie – Guillaume

+0

Prima di mostrare la tastiera su schermo, è possibile simulare una pressione di blocco maiuscole se non è già attiva. Penso che dovrebbe funzionare – Barrie

+0

L'approccio di base per controllare il blocco delle maiuscole e quindi l'abilitazione è il contorno [qui] (http://stackoverflow.com/a/577422/1240407) e [qui] (http://stackoverflow.com/a/15089809/1240407) – Barrie

1

non ho mai usato vincere 8, ma nella vittoria 10 è possibile utilizzare InputScope per controllare ciò che sullo schermo viene utilizzata la tastiera:

<TextBox Grid.Row="0" 
     InputScope="Number" /> 
<TextBox Grid.Row="1" 
     InputScope="Default" /> 
Problemi correlati