如何使Windows 8平板电脑在输入字段聚焦时打开屏幕键盘



我正在为Windows8.1平板电脑开发一个应用程序(使用Java&eclipseRCP)。

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

我曾尝试以编程方式打开OSK,但它并没有按预期工作。OSK是在一个窗口中启动的,该窗口将焦点从输入字段中移除,因此,键入的字符不会到达输入。

OSK按以下启动

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

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

更新

我设法用以编程方式打开了键盘

Runtime.getRuntime().exec(path + "tabtip.exe")

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

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

然而,这是用于通过搜索魅力进行搜索。

这是我的解决方案,似乎可以正常工作。我曾希望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启动不需要这些权限。为什么?!?:-(

最新更新