使用此代码片段,我将通过Java Swings的焦点获取事件启动On Screen键盘进程。
String sysroot = System.getenv("SystemRoot");
Process proc = Runtime.getRuntime().exec("cmd /c " + sysroot + "/system32/osk.exe");
当焦点丢失时,键盘应该关闭。我使用proc.destroy()
来实现它。
此实现在Windows 8平板电脑中表现异常。它在焦点上打开键盘,在焦点丢失时不关闭。我正在从Eclipse运行该程序。
同样的实现适用于Windows 7桌面。唯一的变化是,我没有在Windows 7中指定cmd /c
。对于Win 8,它甚至没有打开键盘,如果我不给cmd /c
请建议解决此问题。
答案 0 :(得分:1)
这对我有用(Java& eclipse RCP):
text.addFocusListener(new FocusListener()
{
@Override
public void focusLost(FocusEvent arg0)
{
LogUtil.logInfo("Closing OSK");
try
{
if(Settings.getBoolean(Settings.OSK_USETABTIP)) {
Runtime.getRuntime().exec("cmd /c taskkill /IM tabtip.exe");
} else {
Runtime.getRuntime().exec("cmd /c taskkill /IM osk.exe");
}
}
catch (IOException e)
{
LogUtil.logError(e.toString());
}
}
@Override
public void focusGained(FocusEvent arg0)
{
try
{
String sysroot = System.getenv("SystemRoot");
if(Settings.getBoolean(Settings.OSK_USETABTIP)) {
LogUtil.logInfo("Opening TabTip");
ProcessBuilder pb = new ProcessBuilder("C:/pathtotabtip/tabtip.exe");
pb.start();
} else {
LogUtil.logInfo("Opening OSK");
ProcessBuilder pb = new ProcessBuilder(sysroot + "/system32/osk.exe");
pb.start();
}
}
catch (Exception e)
{
LogUtil.logError(e.toString());
}
}
});