通过Java双击应用程序打开屏幕键盘(Windows 7 64位)

通过Java双击应用程序打开屏幕键盘(Windows 7 64位),java,windows,runtime.exec,on-screen-keyboard,Java,Windows,Runtime.exec,On Screen Keyboard,我的Java应用程序中有以下代码: boolean is64 = System.getProperty("os.arch").contains("64"); String oskPath = is64 ? "/SysWOW64/osk.exe" :"/system32/osk.exe"; Desktop desktop = null; if (Desktop.isDesktopSupported()) { desktop = Desktop.getDesktop(); } String

我的Java应用程序中有以下代码:

boolean is64 = System.getProperty("os.arch").contains("64");
String oskPath = is64 ? "/SysWOW64/osk.exe" :"/system32/osk.exe";

Desktop desktop = null;
if (Desktop.isDesktopSupported()) {
    desktop = Desktop.getDesktop();
}
String sysroot = System.getenv("SystemRoot");
try {
    System.out.println("SysArch "+System.getProperty("os.arch")+ " " +is64);
    desktop.open(new File(sysroot + oskPath));
wich调用Windows的屏幕键盘。当我在64位Windows上运行.jar时,它是正常的,但当我运行.exe时它不工作。 我试过这个:

Runtime.getRuntime().exec("cmd /c " + sysroot + oskPath);
这是:

Runtime.getRuntime().exec("osk");

但同样的事情发生了。我用launch4j创建了.exe,并试图将.bat(运行.jar的人)转换为.exe,但什么也没发生。。有人能帮忙吗?。提前感谢。

请注意,
os.arch
不返回Windows的体系结构,而是返回JRE的体系结构。看看这个答案:如果你这样做会发生什么?您看到了什么?有关正确创建和处理流程的许多好提示,请参见。然后忽略它引用
exec
,并使用
ProcessBuilder
创建进程。请注意
os.arch
不返回Windows的体系结构,而是返回JRE的体系结构。看看这个答案:如果你这样做会发生什么?您看到了什么?有关正确创建和处理流程的许多好提示,请参见。然后忽略它引用
exec
,并使用
ProcessBuilder
创建流程。