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

问题描述:

您好,我在Win7中遇到了.NET触摸屏应用程序的问题(没有连接PC键盘)。 我正在使用应用程序的一部分作为外部设备的终端窗口。 当终端窗口打开后,我通过调用启动屏幕上的键盘: -如何从C#winform关闭屏幕键盘并取消任何CTRL或ALT按键

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,那么一切都很好。但是我想要/需要通过从我的代码中单击一次来关闭它们。 那么,如何在自动退出键盘时清除任何“卡住”键,或者是否有其他方法可以执行此操作?

+0

相反onscreenProcess.Kill()的',','尝试onscreenProcess.CloseMainWindow();'...(不知道这会在你的目标平台和/或目标应用程序的任何区别,但是这“优雅”的方式来要求应用程序自行关闭)。 –

+0

谢谢@Idle_Mind。这“撬”CTRL和隐藏键盘。但我需要退出键盘。我曾尝试使用onscreenProcess.CloseMainWindow()正常关闭键盘,然后使用onscreenProcess.Kill()退出键盘,但这只是恢复为仍然卡住的CTRL。 – AHP

确定这似乎解决了问题 如果我等了很长时间(1500毫秒),然后杀死进程似乎都工作!

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

如果有人决定将其标记为无用,也许他们可以解释为什么,并给出他们认为更好的解决方案。 – AHP