【问题标题】:How do I close the on-screen keyboard from C# winform and cancel any CTRL or ALT keypresses如何从 C# winform 关闭屏幕键盘并取消任何 CTRL 或 ALT 按键
【发布时间】:2015-10-05 15:49:34
【问题描述】:

您好,我在 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,一切都很好。但我想/需要通过单击我的代码将两者关闭。 那么,自动退出键盘时如何清除任何“卡住”键,或者有其他方法可以做到这一点?

【问题讨论】:

  • 代替onscreenProcess.Kill();,尝试onscreenProcess.CloseMainWindow();...(不确定这是否会对您的目标平台和/或目标应用程序产生任何影响,但这是询问问题的“优雅”方式应用程序自行关闭)。
  • 感谢@Idle_Mind。这会“松开” CTRL 并隐藏键盘。但我需要退出键盘。我尝试使用 onscreenProcess.CloseMainWindow() 优雅地关闭键盘,然后使用 onscreenProcess.Kill() 退出键盘,但这只是恢复到 CTRL 仍然卡住。

标签: c# winforms keyboard touchscreen ctrl


【解决方案1】:

好的,这似乎解决了问题 如果我等待相当长的时间(1500 毫秒)然后终止进程,这一切似乎都有效!!!

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

【讨论】:

  • 如果有人决定将此标记为无用,也许他们可以解释原因并给出他们认为更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-01-13
  • 2019-01-10
  • 2015-10-18
  • 2013-11-18
  • 2013-07-03
  • 1970-01-01
  • 2011-08-08
相关资源
最近更新 更多