我有一个非常旧的遗留 Java 应用程序,我想从 C# 自动化。问题是我们没有应用程序的源代码,程序员早就离开了公司。我可能可以“反编译”.jar 文件,但我也不是 java 程序员,而且我认为访问源代码(没有注释)不会让我更进一步。
到目前为止,我设法(有点成功)使用以下代码自动化应用程序的登录对话框(我正在循环轮询,因为可能有多个 Java 应用程序实例):
while (true) {
var processes = Process.GetProcesses().Where(p => p.MainWindowTitle.Equals("Title of Java Login Window"));
foreach (var process in processes) {
var handle = process.MainWindowHandle;
SetForegroundWindow(handle);
await Task.Delay(500);
SendKeys.SendWait("the password");
SendKeys.SendWait("{TAB}");
SendKeys.SendWait("the username");
SendKeys.SendWait("{ENTER}");
await Task.Delay(3000);
}
await Task.Delay(500);
}
现在的问题是我无法获取 Java 窗口的内容。例如,登录可能存在问题,例如用户或密码错误。所以我不想检查 Java 窗口中的登录失败消息。
有没有办法访问 Java 窗口的实际内容(文本)?
此外,Java 应用程序的所有实例共享相同的 PID,因为实际上它只是一个运行所有应用程序的 java.exe 进程。有没有办法区分应用程序?显然不能使用PID来完成......