以编程方式隐藏文本框中的Win7触摸键盘提示? VB.net WPF应用程序

时间:2014-10-03 15:46:32

标签: wpf vb.net windows-7 touchscreen

我有一个最初在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或其他任何东西。

1 个答案:

答案 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);