繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM