如何从C#winform关闭屏幕键盘并取消任何CTRL或ALT按键

时间:2015-10-05 15:49:34

标签: c# winforms keyboard touchscreen ctrl

嗨我在Win7中遇到.NET触摸屏应用程序的问题(没有连接PC键盘)。 我正在使用应用程序的一部分充当外部设备的终端窗口。 当终端窗口打开时,我通过调用以下方式启动屏幕键盘: -

string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
string onScreenKeyboardPath = System.IO.Path.Combine(progFiles, "TabTip.exe");
oskProcess = System.Diagnostics.Process.Start(onScreenKeyboardPath);

完成终端窗口后,我希望通过单击表单的X关闭表单,然后自动关闭屏幕键盘。所以我打电话给: -

Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
foreach (Process onscreenProcess in oskProcessArray)
{
    onscreenProcess.Kill();
    onscreenProcess.Dispose();
}

这很有效,除非按下最后一个键是CTRL,ALT或SHIFT键。如果是这种情况,那么这些仍然会被卡住"即使在键盘被杀之后。如果我重新启动屏幕键盘,它们仍然会突出显示。

如果在关闭表单之前先点击键盘上的红色X,一切都很好。但是我希望/需要通过我的代码中的单击来关闭它们。 那么,我该如何清除任何"卡住"键盘自动退出键盘,或者有不同的方法吗?

1 个答案:

答案 0 :(得分:0)

好的,这似乎解决了这个问题 如果我等了很长时间(1500毫秒)然后杀死这个过程似乎都有效!!!

Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
foreach (Process onscreenProcess in oskProcessArray)
{
    Application.DoEvents();
    onscreenProcess.CloseMainWindow();
    Application.DoEvents();
    Thread.Sleep(1500);
    onscreenProcess.Kill();
}