3

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を使用して行うことはできません...

4

1 に答える 1

1

jar ファイルを逆コンパイルするのは非常に簡単です。(現在) 最も広く使用されているJava decompilerをダウンロードし、[ファイル] -> [開く] をクリックして、jar ファイルを開きます。その後、メイン ウィンドウでコードを参照し、コピーして実際のファイルに貼り付けることができます。

于 2013-07-25T10:48:23.167 に答える