如何从c# winform中关闭屏幕上的键盘并取消CTRL或ALT键

本文关键字:键盘 取消 CTRL ALT 屏幕 winform | 更新日期: 2023-09-27 18:16:01

嗨,我在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,一切都很好。但我想/需要关闭两者一起从我的代码一个单一的点击。那么,当退出键盘时,我如何清除任何"卡住"的键,或者有不同的方法来做到这一点?

如何从c# winform中关闭屏幕上的键盘并取消CTRL或ALT键

好,这似乎解决了问题如果我等待相当长的时间(1500毫秒),然后杀死这个过程,它似乎都工作!!

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