使用 32 位 JRE 打开 64 位 windows 虚拟键盘
Posted
技术标签:
【中文标题】使用 32 位 JRE 打开 64 位 windows 虚拟键盘【英文标题】:Open the 64 bits windows's virtual keyboard using a 32 bit JRE 【发布时间】:2012-01-09 21:11:06 【问题描述】:我需要从我的应用程序中打开 Windows 的虚拟键盘,它将使用 Eclipse RCP 在 windows 32 位平台(即 win32 JRE)上部署。
根据open the Windows virtual keyboard in a Java program 帖子的答案,应用程序在 32 位 Windows 操作系统上正确运行,但拒绝在 64 位 Windows 操作系统上运行。
我使用的解决方案如下:
// String sysroot = System.getenv("SystemRoot"); //$NON-NLS-1$
// Runtime.getRuntime().exec("cmd.exe /c "+sysroot + "\\system32\\osk.exe /n"); //$NON-NLS-1$ //$NON-NLS-2$
Runtime.getRuntime().exec("osk");
有没有办法在不使用 64 位部署的情况下解决这个问题? (我无法创建,只要我使用的库不支持此环境)。
谢谢
【问题讨论】:
如果您的 Java 应用程序是使用 32 位模式 JVM 在 32 位模式下编译/运行的,则您无法运行调用 64 位版本可执行文件的进程。比方说,Windows XP 32 位,因此它的 OSK.EXE 版本是 32 位;那么您的 Java 应用程序可以执行该过程,因为它使用 32 位模式 JVM 匹配。现在,假设 Windows 7 64 位,因此它的 OSK.exe 版本是 64 位,但是您的 Java 应用程序是使用 32 位模式 JVM 在 32 位模式下编译/运行的,那么您的应用程序将不会像它一样运行该进程不匹配。 see link 感谢您的帮助。 ,这就是我的假设。如果我找到解决方法,我会将其发布在此帖子中 这完全是 hack,但是如果您编写一个只调用可执行文件的小型本机包装器,并将该包装器设为 32 位呢?然后,您可以从您的 Java 代码执行包装器。包装器可以像 C/C++ 中的system("osk");
一样简单。
我会尝试使用 .bat 文件来使用它,只是为了避免依赖 java - c++ 首先,但我会尝试按照你说的做。谢谢
调用一个bat文件可能是个好主意,有兴趣了解
【参考方案1】:
试试这个代码。不确定它会起作用。但值得一试。
Desktop desktop = null;
if (Desktop.isDesktopSupported())
desktop = Desktop.getDesktop();
String sysroot = System.getenv("SystemRoot");
desktop.open(new File(sysroot+"/system32/osk.exe"));
我是这个桌面类的新手,我想知道这个类是否能做到这一点;)
【讨论】:
Desktop.open() 用于打开与文件关联的应用程序(例如文字处理器、文本编辑器等)。我怀疑您是否可以使用它运行可执行文件(但尚未尝试) 其实我也想做同样的事情——打开可执行文件。由于 Desktop.open() 用于打开 Windows 配置(即文件类型引用),我希望在这种情况下不会出现 64 位问题。我运行了这段代码。它适用于我的机器..但我没有尝试使用不同的位参考。即:64 位 windows 和 32 位 jre。【参考方案2】:否。您将无法从 32 位 Java 应用程序和/或 32 位操作系统中使用 64 位库。 您必须部署您的应用 x64。
【讨论】:
【参考方案3】:这是我的解决方法:
FileOutputStream fileOutputStream = new FileOutputStream(new File("C:/TEMP/RUN.BAT"));
String file = "START C:/Windows/System32/osk.exe" + '\n'
+ "EXIT";
fileOutputStream.write(file.getBytes());
fileOutputStream.close();
Runtime.getRuntime().exec("CMD /C START C:/TEMP/RUN.bat");
Runtime.getRuntime().exec("CMD /C DEL C:/TEMP/RUN.bat");
【讨论】:
以上是关于使用 32 位 JRE 打开 64 位 windows 虚拟键盘的主要内容,如果未能解决你的问题,请参考以下文章