2

使用此代码片段,我通过来自 Java Swings 的焦点获得事件启动屏幕键盘进程。

String sysroot = System.getenv("SystemRoot");
Process proc = Runtime.getRuntime().exec("cmd /c " + sysroot + "/system32/osk.exe");

当失去焦点时,键盘应该关闭。我曾经proc.destroy()实现过。此实现在 Windows 8 平板电脑中表现异常。它在焦点上打开键盘,而不是在失去焦点时关闭。我正在从 Eclipse 运行程序。

相同的实现在 Windows 7 桌面上完美运行。唯一的变化是,我没有cmd /c在 Windows 7 中指定。对于 Win 8,如果我不给,它甚至不会打开键盘cmd /c

请提出解决方案。

4

1 回答 1

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());
            }
        }
    });
于 2014-09-11T08:48:26.840 回答