【发布时间】: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