Java 向图形化进程发送输入?
我正在尝试制作一个小Java应用程序,它接受我的输入,打开另一个应用程序(Windows Calculator/“calc”),并用我的输入为该应用程序提供信息 目前,我正在尝试对简单的Windows计算器执行此操作,但它似乎无法使用常规方法:Java 向图形化进程发送输入?,java,io,Java,Io,我正在尝试制作一个小Java应用程序,它接受我的输入,打开另一个应用程序(Windows Calculator/“calc”),并用我的输入为该应用程序提供信息 目前,我正在尝试对简单的Windows计算器执行此操作,但它似乎无法使用常规方法: public Feeder(String processID) throws Exception { rt = Runtime.getRuntime(); proc = rt.exec("calc"); input = new
public Feeder(String processID) throws Exception {
rt = Runtime.getRuntime();
proc = rt.exec("calc");
input = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
}
public void sendCommand(int cmd) throws Exception {
input.write(cmd);
input.flush();
input.close();
proc.waitFor();
}
()
然而,与上面发送到另一个命令行进程的代码相反,WinCalc是图形化的。是否仍然可以向其发送输入,而不必经历逆向工程等各种麻烦?您可以使用java.awt.Robot将文本发送到当前活动窗口,并为您移动和单击鼠标。如果您需要更高级的消息传递,那么您将需要JNI或(我的推荐)JNA 其他选项包括将应用程序绑定到AutoHotKey或AutoIt V3
就我自己而言,我已经成功地运行了JNA、Robot和AutoIt组合的其他应用程序,使用了最适合这种情况的应用程序。您可以使用java.awt.Robot将文本发送到当前活动窗口,并为您移动和单击鼠标。如果您需要更高级的消息传递,那么您将需要JNI或(我的推荐)JNA 其他选项包括将应用程序绑定到AutoHotKey或AutoIt V3
就我自己而言,我已经成功地使用JNA、Robot和AutoIt的组合运行了其他应用程序,使用了最适合这种情况的应用程序。您可能必须(使用JNI)将插件插入消息传递系统,通知应用程序事件(如“鼠标单击”或“按下R键”)。我建议您探索类似于
AutoHotKey
的解决方案,看看它们是否适合您。我也同意@SJuan76。考虑一下AutoIT版本3,它类似于AutoHotKey,同样也是一个强大的Windows脚本工具。我很欣赏AutoHoKy的想法,我已经知道它存在。但我真的很想看看是否有可能仅仅通过Java解决这个问题。:)您可能必须(使用JNI)将插件插入消息传递系统,以通知应用程序事件(如“鼠标单击”或“按下R键”)。我建议您探索类似于AutoHotKey
的解决方案,看看它们是否适合您。我也同意@SJuan76。考虑一下AutoIT版本3,它类似于AutoHotKey,同样也是一个强大的Windows脚本工具。我很欣赏AutoHoKy的想法,我已经知道它存在。但我真的很想看看是否有可能仅仅通过Java解决这个问题。:)