无法关闭虚拟键盘
Posted
技术标签:
【中文标题】无法关闭虚拟键盘【英文标题】:Can't close virtual keyboard 【发布时间】:2015-10-12 14:04:53 【问题描述】:我正在为触摸屏显示器开发应用程序。我可以使用以下方式调用虚拟键盘:
System.Diagnostics.Process.Start("osk.exe");
我希望通过单击应用程序中的按钮来关闭键盘。
在我的onclick
方法中,我有以下代码,但它不起作用:
System.Diagnostics.Process.Start("osk.exe").Kill();
我该如何解决?
【问题讨论】:
您尝试关闭它实际上会打开一个 second 键盘实例并立即关闭它。 保存第一次Start
时返回的Process
的副本,然后杀死那个进程。
【参考方案1】:
Process.Start
返回一个Process
对象。捕获该返回值并在用户单击按钮时使用它来关闭键盘。
var osk = System.Diagnostics.Process.Start("osk.exe");
//Do things
//In your button click event
osk.Close();
【讨论】:
【参考方案2】:我也很难找到解决方案。即使这个问题比较老,如果有人遇到同样的问题,我也会发布对我有用的解决方案。
在启动过程时保存参考对我来说不起作用。我仍然不知道为什么。有效的是使用进程名称osk
循环遍历所有进程。
foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("osk"))
process.Kill();
【讨论】:
【参考方案3】:尝试这样做:
Process osk = System.Diagnostics.Process.Start("osk.exe");
当你准备好杀死它时,这样做:
osk.Kill();
你的方法的问题是你开始osk.exe
,然后试图杀死它。但是您杀死它的代码正在启动一个新进程,然后杀死该新启动的进程而不是您的原始进程。它会在 OSK 显示之前立即杀死它,因此您甚至没有看到第二个实例。
另外,了解osk.Kill()
和osk.Close()
之间的区别。 Close()
相当于点击窗口右上角的红色小 X。它允许应用程序自行优雅地关闭。 Kill()
相当于打开任务管理器,强制进程结束。 Close()
可能就是你想要的。
【讨论】:
我还是有问题 public Form1() InitializeComponent(); var osk = System.Diagnostics.Process.Start("osk.exe"); public void button1_Click(object sender, EventArgs e) oks.Close();以上是关于无法关闭虚拟键盘的主要内容,如果未能解决你的问题,请参考以下文章