我有一个最初在VB.net 2010 Express中开发的WPF应用程序。它在Windows XP上运行良好,在非触摸屏Windows 7机器上运行良好。
该应用程序专为触摸屏使用而设计,其UI用大按钮进行整理,用于编辑数字等。它甚至还有一个小屏幕键盘,只有应用程序所需的按钮,因此您无法进入Windows。
不幸的是,我现在需要使用99.9%的代码为Windows 7触摸屏机器开发新版本的应用程序。它有适当的触摸屏驱动程序(万岁!)而不是鼠标仿真(嘘声),但每当你突出显示一个文本框时,它就会出现Win7的小“打开OSK”提示,它会在我的UI上方卡住。
图片来源:http://i.imgur.com/W8XthZF.jpg
我可以稍微调整TextBox来说“不显示Win7 OSK提示”吗? FWIW我现在使用的是Visual Studio Express 2013,仍然在VB.net中编程,但目标是.NET 4.5.2。
显然,janky解决方案是将TextBox向下移动远远不会重叠的东西,但我还想删除一种方便用户启动Win7屏幕键盘的方法,然后点击win键并开始玩Solitaire或其他任何东西。
答案 0 :(得分:1)
键盘由一个名为的进程处理 tabtip.exe 通常在@“C:\ Program Files \ Common Files \ microsoft shared \ ink \ tabtip.exe”中的站点;
1)你可以杀死这个过程。:
var p = Process.GetProcesses();
var n = p.Where(x => x.ProcessName.ToLower().Contains("tabtip"));
foreach (var item in n)
{
try
{
item.CloseMainWindow();
//item.Kill();
}
catch { }
}
2)使用windows 32消息隐藏(我的经验并不总是有效):
var p = Process.GetProcesses();
var n = p.Where(x => x.ProcessName.ToLower().Contains("tabtip")).FirstOrDefault();
if (n != null)
{
n.CloseMainWindow();
}
或者其中一个
// SendMessage(_keyboardProcess.Handle, WS_MINIMIZE, IntPtr.Zero, IntPtr.Zero);
// SendMessage(_keyboardProcess.Handle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
// SendMessage(_keyboardProcess.Handle, WM_QUIT, IntPtr.Zero, IntPtr.Zero);