Windows 8平板电脑的屏幕键盘

时间:2013-08-08 07:39:12

标签: java

使用此代码片段,我将通过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

请建议解决此问题。

1 个答案:

答案 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());
            }
        }
    });