【问题标题】:On Screen keyboard in Windows 8 tabletWindows 8 平板电脑中的屏幕键盘
【发布时间】:2013-08-08 07:39:12
【问题描述】:

使用此代码 sn-p,我通过来自 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 桌面上完美运行。唯一的变化是,我没有在Windows 7中指定cmd /c。对于Win 8,如果我不给cmd /c,它甚至不会打开键盘。

请提出解决方案。

【问题讨论】:

    标签: java


    【解决方案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());
                }
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2020-03-03
      • 2014-11-03
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多