[英]Programmatically hide Win7 touch keyboard prompt in text box? VB.net WPF app
我有一个最初在VB.net 2010 Express中开发的WPF应用程序。 它在Windows XP上运行良好,在非触摸屏Windows 7计算机上运行良好。
该应用程序专为触摸屏使用而设计,其UI带有用于编辑数字等的大按钮。它甚至还有一个小的屏幕键盘,仅包含应用程序所需的按钮,因此您无法进入Windows。
不幸的是,我现在需要使用99.9%的代码来为Windows 7触摸屏机器开发该应用程序的新版本。 它具有适当的触摸屏驱动程序(hooray!),而不是鼠标仿真(boo),但是只要突出显示一个文本框,Win7的小“ open the OSK”提示就会出现,该提示卡在我的UI上方。
图片在这里: http : //i.imgur.com/W8XthZF.jpg
我可以以某种方式将TextBox调整为“不显示Win7 OSK提示”吗? FWIW我现在正在使用Visual Studio Express 2013,仍在VB.net中进行编程,但目标是.NET 4.5.2。
显然,不明智的解决方案是将TextBox向下移得足够远,以至于不会重叠,但是我也想删除一种方便的方法,使用户可以启动Win7屏幕键盘,然后按一下Win键并开始播放纸牌或其他。
键盘由一个名为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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.