Runtime.getRuntime().exec无法执行/show Tabtip.exe



我在JavaFX SceneBuilder中的一个文本字段上设置了这个OnClick方法,如果用户选择该文本字段,该文本字段将弹出Windows 8触摸键盘。然而,当我点击文本字段时,似乎什么都没有发生,但当我尝试在任务管理器中检查Tabtip.exe时,它确实显示在那里。代码为:

try
{ 
 Runtime rt = Runtime.getRtuntime();
 rt.exec( "cmd /c C:\Programs Files\Common Files\Microsoft Shared\ink\TabTip.exe");
}

catch 
{
  ex.printStackTrace();
}

没有触发任何错误,TabTip.exe正在任务管理器中运行,但弹出键盘没有显示,有人能解决这个问题吗?谢谢

当您想要执行一个在命令提示符中包含空格的命令时,必须用双引号将其括起来。

像这样:

String commandStr = "cmd /c "C:\Program Files\Common Files\Microsoft Shared\ink\mip.exe"";
rt.exec( commandStr );

除此之外,如果您想知道您的错误,您可以从类Process的对象中获取错误流,该对象由runtimeObject.exec().返回

String commandStr =  "cmd /c C:\Programs Files\Common Files\Microsoft Shared\ink\TabTip.exe";   // Like you did
InputStream is = rt.exec( commandStr ).getErrorStream();
int b;
while((b=(is.read()))!=-1)
  System.out.print((char)b);
}

请这样做。对我来说,在window10中使用javaFx应用程序是可以的。

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", ""C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe");
builder.redirectErrorStream(true);
Process p;
try
{
    p = builder.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (true)
    {
        line = r.readLine();
        if (line == null)
        {
            break;
        }
        System.out.println(line);
    }
}
catch (IOException e)`enter code here`
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}`enter code here`

运行TabTip.exe的唯一方法是在管理模式下运行软件。

我在网上找到了以下批次代码。

如何使用屏幕和触摸键盘代替螺旋键盘

tasklist | find /I "TabTip.exe" >NUL && (taskkill /IM "TabTip.exe" /T)
start "" "TabTip.exe"

该代码终止了TabTip进程并执行了一个新的TabTip。

在我的例子中,我创建了一个名为keyboard.bat的文件,并添加了前面的示例。

在java中,我创建了一个方法来读取同一文件夹中的这个文件。

这是我的代码

try{
  File file = new File("keyboard.bat");
  Runtime.getRuntime().exec(file.getAbsolutePath());
}catch(IOException ex){        
  Logger.getLogger(RunGazePoint.class.getName()).log(Level.SEVERE, null, ex);
}

之后,我编译了我的应用程序,并用launch4j软件以可执行模式封装它。

另一种方式是通过命令执行,如果使用多线程,系统可以避免文件的说教而不执行软件。

创建两个方法来杀死和调用键盘。

    //hide the Keyboard
            String[] array = new String[]{"cmd.exe","/c","taskkill /IM "TabTip.exe" /Fn" +
""};
            Runtime.getRuntime().exec(array);
//Show the keyboard
            String[] array = new String[]{"cmd.exe","/c","start "" "TabTip.exe""};
            Runtime.getRuntime().exec(array);

相关内容

  • 没有找到相关文章