我们正在开发在Windows 7平板电脑上运行的桌面WPF 应用,并且正在添加一些带有Windows 8的Surface Pro设备。
我们立即注意到当TextBox获得焦点时,不再显示小键盘图标。我们通过运行" tabtip.exe"解决了这个问题。在所有TextBox的MouseDown事件上。
我们有一些数字文本框(订单上的项目数量),并且想要打开屏幕键盘进行数字输入,但默认情况下会打开qwerty键。
我一直在搜索任何命令行参数,我可以传递给tabtip.exe来改变它的输入模式,但是没有运气。对于使用都市风格的应用程序来说,这似乎是一项微不足道的任务,但在桌面方面是不可能的。
我可以使用tabtip.exe命令行参数来完成此操作吗?
答案 0 :(得分:9)
在@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;
}
}
}
}
答案 1 :(得分:8)
HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7
中的(Windows 8)
更改REG_DWORD KeyboardLayoutPreference
0
的值是常规布局
值1
是分割键盘,中间有数字键盘
REG_DWORD LastUsedModalityWasHandwriting
也必须是0
或1
,当再次启动tabtip时,它将以笔手写区域打开。
答案 2 :(得分:1)
您可以通过Tabtip的注册表设置来控制输入模式。查找名为KeyboardLayoutPreference的注册表项。
答案 3 :(得分:1)
我从未使用过win 8,但在第10场胜利中你可以使用InputScope来控制使用屏幕键盘:
<TextBox Grid.Row="0"
InputScope="Number" />
<TextBox Grid.Row="1"
InputScope="Default" />