如何在输入字段获得焦点时让Windows 8平板电脑打开屏幕键盘?

时间:2014-09-10 09:06:05

标签: windows-8.1 tablet on-screen-keyboard

我正在为Windows 8.1平板电脑开发一个应用程序(使用Java& eclipse RCP)。

我希望Windows在文本字段获得焦点时自动打开OSK,并在焦点丢失时再次关闭它。这适用于某些内置窗口功能,例如搜索(从屏幕右侧滑入并显示搜索字段)

我试图以编程方式打开OSK,但它无法按预期工作。 OSK已启动但在一个窗口中,该窗口从输入字段中删除焦点,因此键入的字符无法到达输入。

OSK启动如下

cmd /c c:WINDOWS/system32/osk.exe

也许还有另一种方法可以启动它,以便输入字段不会失去焦点。

更新

我设法使用

以编程方式打开键盘
Runtime.getRuntime().exec(path + "tabtip.exe")

仅在之后才以管理员身份运行应用。为什么我可以从命令行运行tabtip但不能从我的应用程序启动它?

2 个答案:

答案 0 :(得分:0)

命名空间Windows.ApplicationModel.Search.SearchPane有一个名为ShowOnKeyboardInput的属性。

但是,这用于通过搜索超级按钮进行搜索。

答案 1 :(得分:0)

这是我的解决方案似乎工作正常。我曾希望Windows 8可以自动执行此操作但我无法找到方法。

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

注意

taskkill tabtip.exe仅在Windows 8上以管理员身份运行时才有效。从cmd开始不需要这些权限。为什么?!? : - (