我正在开发的应用程序将在Windows 7上运行。它将用于通过触摸屏输入一些信息。每当用户需要输入信息时,我需要弹出一个屏幕键盘。我的问题是,我应该从头开始创建一个键盘类还是使用Windows 7内置的屏幕键盘,并且如何在我的Java应用程序中调用它?谢谢。
我正在开发的应用程序将在Windows 7上运行。它将用于通过触摸屏输入一些信息。每当用户需要输入信息时,我需要弹出一个屏幕键盘。我的问题是,我应该从头开始创建一个键盘类还是使用Windows 7内置的屏幕键盘,并且如何在我的Java应用程序中调用它?谢谢。
我刚刚尝试了屏幕键盘并发现它很容易使用。您只需要使用Runtime.exec()
或ProcessBuilder
调用它。然后,如果您的应用程序失去焦点,则将其带回到应用程序中,同时活动元素必须是当前可编辑元素(文本字段、文本区域等)。此时,用户在虚拟键盘上输入字符将被写入您的应用程序。
从Java中执行osk.exe存在一些困难,它会抛出IOException:
java.io.IOException: Cannot run program "C:\Windows\System32\osk.exe": CreateProcess error=740, The requested operation requires elevation
技巧在于通过命令行shell (cmd
)来运行命令:
Runtime.getRuntime().exec("cmd /c C:\\Windows\\System32\\osk.exe");
这行代码在我的机器上可以正常运行。
Runtime.getRuntime().exec(....)
和Matlabsystem(....)
。结果是一样的:无法启动屏幕键盘。在谷歌上我找不到任何可行的解决方案,所以我试图将两个想法结合起来并升级上面的答案:Runtime.getRuntime().exec('C:\windows\sysnative\cmd /c C:\Windows\system32\osk.exe');
希望这有所帮助。
cmd /c
技巧在 win8 下让 osk 工作。有没有可能再关闭它呢?在其他窗口中,我直接使用 osk(而不是通过cmd /c
),因此可以轻松地销毁该进程。但是,这个技巧不再起作用了。 :( - brimborium