c# - 从 C# 自动化遗留 Java 应用程序

标签 c# java automation

我有一个非常古老的遗留 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 来完成...

最佳答案

反编译 jar 文件非常容易。只需下载(当前)最广泛使用的 java decompiler ,单击文件 -> 打开并打开您的 jar 文件。然后您可以在主窗口中浏览代码,并将其复制并粘贴到实际文件中。

关于c# - 从 C# 自动化遗留 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855829/

相关文章:

java - 如何测试示例 TCP Socket 程序

c# - 将cmd gradlew输出重定向到C#

c# - 如何开始使用 SitecoreFakeDb 进行 Sitecore 单元测试

c# - System.Runtime.InteropServices.ComTypes.IStream 到 System.IO.Stream

c# - 如何在不影响格式的情况下附加 json 文件

java - Hibernate分页机制

java - Android 只允许从矩形的一侧进入

javascript - 我可以使用 Google Apps 脚本通过 Gmail 从定期发送的电子邮件中导出特定信息吗?

linux - 修改Linux文件内容

visual-studio-2010 - 使用 PowerShell 修改 Visual Studio 解决方案和项目文件