C# から自動化したい非常に古いレガシー Java アプリケーションがあります。問題は、アプリケーションのソース コードが手元になく、そのプログラマーが会社を離れて久しいことです。おそらく .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 を共有します。これは、実際にはすべてのアプリケーションを実行する 1 つの java.exe プロセスにすぎないためです。アプリケーションを区別する方法はありますか? 明らかに、PIDを使用して行うことはできません...