无法关闭虚拟键盘

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();

以上是关于无法关闭虚拟键盘的主要内容,如果未能解决你的问题,请参考以下文章

iOS 关闭/收起虚拟键盘的若干方法

移动web 怎么捕获虚拟键盘弹出和关闭事件

Mottie 的虚拟键盘关闭验证为真

如何从 Jetpack Compose TextField 关闭虚拟键盘?

g480虚拟机linux小键盘怎么关

jQuery mobile:关闭弹出窗口后隐藏虚拟键盘