Java 自动化与基于封闭源码的Windows XP GUI程序的交互

Java 自动化与基于封闭源码的Windows XP GUI程序的交互,java,python,windows,interaction,Java,Python,Windows,Interaction,我有一个基于WindowsXP的封闭源码GUI,可以执行一些测量 我当前的手动工作流程是: 通过单击GUI上的“运行”按钮开始数据捕获 按GUI上的“停止”按钮停止数据捕获 读取屏幕上显示的一些值 将会话的数据保存到文件中 没有库或API来自动化整个交互,因此我别无选择,只能手动完成:(我讨厌它 正如您清楚地看到的,这种方法不仅耗时,而且容易出错,因为它受到我的反应时间的限制,而我的反应时间随每次运行而变化 我想知道是否有一种方法可以自动化这种交互?如果有,我的选择是什么?我更喜欢用Python

我有一个基于WindowsXP的封闭源码GUI,可以执行一些测量

我当前的手动工作流程是:

  • 通过单击GUI上的“运行”按钮开始数据捕获
  • 按GUI上的“停止”按钮停止数据捕获
  • 读取屏幕上显示的一些值
  • 将会话的数据保存到文件中 没有库或API来自动化整个交互,因此我别无选择,只能手动完成:(我讨厌它

    正如您清楚地看到的,这种方法不仅耗时,而且容易出错,因为它受到我的反应时间的限制,而我的反应时间随每次运行而变化

    我想知道是否有一种方法可以自动化这种交互?如果有,我的选择是什么?我更喜欢用Python或Java实现一些东西。但我也愿意接受其他选择


    我的想法是实现一个在Windows XP机器上运行的服务器进程。然后我可以远程向这个服务器进程发送请求,然后这个服务器进程将自动执行我的工作流。

    有一个很棒的Windows GUI自动化工具叫autoit。

    你问过如何将autoit与Java链接。出于我的目的,我使用ProcessBuilder创建一个进程,然后获取进程InputStream和ErrorStream,并确保在单独的线程中处理这些流。我让AutoIt使用InputStream与我的Java程序通信。这是一篇很好的文章(尽管有点过时)这是一个:。确保进程在后台线程上运行以及两个流在各自的线程中读取是关键。如果您在Swing GUI中执行此操作,则必须格外小心,确保所有Swing调用都在主Swing事件线程EDT上执行。

    我强烈支持此建议。Autoit就是为此目的而构建的,而Java不是。如果你试图使用Java来实现这一点,你必须使用JNI或JNA来进行操作系统调用(或者将Java与AutoIt链接,这是我在必要时做的事情)。1+这个答案。我看到这个答案很老了,最近有没有更好的选择?