2013-03-26 22 views
8

Pracujemy nad aplikacją pulpitu WPF, która działa na tabletach z systemem Windows 7 i dodajemy niektóre urządzenia Surface Pro z systemem Windows 8 do miksu .Aplikacja na komputer z systemem Windows 8: otwórz tabtip.exe na klawiaturze pomocniczej (dla numerycznego pola tekstowego)

Zauważyliśmy natychmiast, że mała ikona klawiatury nie jest wyświetlana po odebraniu ostrości przez TextBox. Rozwiązaliśmy go, uruchamiając "tabtip.exe" w zdarzeniu MouseDown dla wszystkich TextBox.

Mamy jednak kilka numerycznych pól tekstowych (ilość dla pozycji na zamówieniu) i chcemy otworzyć klawiaturę ekranową dla wprowadzania liczbowego, ale domyślnie otwiera się z klawiszami qwerty.

Szukałem obszernie dla wszelkich argumentów wiersza poleceń, które mogę przekazać do tabtip.exe, aby zmienić tryb wprowadzania, ale nie miałem szczęścia. Wydaje się to banalnym zadaniem z aplikacją typu Metro, ale niemożliwe po stronie pulpitu.

Czy istnieje argument wiersza polecenia dla tabtip.exe, którego mogę użyć, aby to wykonać?

Odpowiedz

8

w HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7 (Windows 8) zmienić REG_DWORD KeyboardLayoutPreference wartość 0 jest regularny układ wartość 1 jest klawiatura rozłam z numberpad w środkowej

REG_DWORD LastUsedModalityWasHandwriting również musi być 0 lub jeśli 1, po ponownym uruchomieniu tabtip otworzy się z obszarem pisma odręcznego pisaka.

+0

fantastyczne! Ten plik DWORD nie istniał już w rejestrze dla mnie, więc musiałem go utworzyć. Ale na pewno ma pożądany efekt. –

+0

Działa to doskonale na komputerach z systemem Windows 8, ale w systemie Windows 10 TabTip.exe wydaje się resetować wszystkie ustawienia rejestru po otwarciu. – jaredbaszler

+1

@jaredbaszler Windows 10 otwiera 'widok pisma ręcznego', gdy rysik jest obecny, widok pisania, w przeciwnym razie. Do tej pory nie znalazłem żadnych możliwości rozpoczęcia pracy z 'handwriting-view', gdy nie ma rysika. –

1

Możesz kontrolować tryb wprowadzania według ustawień rejestru Tabtip. Poszukaj wpisu rejestru o nazwie KeyboardLayoutPreference.

+1

zrobiłem wyszukiwania w regedit dla tego klucza i nie otrzymała żadnych wyników. Nie mogłem też znaleźć żadnych wyników w Google. Gdzie ten klucz znajduje się w rejestrze i jakie są jego wartości? –

9

co wynika z odpowiedzi udzielonej @tymes, tutaj jest to aplikacja, która pokazuje konsola szybkie otwarcie klawiatury i zmianę różnych ustawień (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

Cześć Barrie, czy wiesz, jak zdobyć całą nazwę klucza rejestru TabTip? Próbuję uzyskać klucz do włączania limitów przy otwieraniu tablicy kluczy ... Dziękujemy – Guillaume

+0

Przed wyświetleniem klawiatury ekranowej można symulować naciśnięcie przycisku Caps Lock, jeśli nie jest on jeszcze włączony. Myślę, że powinno działać – Barrie

+0

Podstawowym podejściem do sprawdzania blokady caps, a następnie włączania jest outline [here] (http://stackoverflow.com/a/577422/1240407) and [here] (http://stackoverflow.com/a/15089809/1240407) – Barrie

1

nigdy nie używałem wygrać 8, ale w wygranej 10 można użyć InputScope kontrolować, co na ekranie służy klawiatura:

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