【问题标题】:How to make Windows 8 tablet open the on-screen-keyboard when an input field gets focus?当输入字段获得焦点时,如何使 Windows 8 平板电脑打开屏幕键盘?
【发布时间】:2014-11-03 20:47:35
【问题描述】:

我正在为 Windows 8.1 平板电脑开发应用程序(使用 Java 和 Eclipse RCP)。

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

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

OSK启动如下

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

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

更新

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      但是,这用于通过 Search charm 进行搜索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-13
        • 1970-01-01
        • 2020-03-03
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        相关资源
        最近更新 更多