Javaで記述されたサードパーティアプリケーションのワークフローを自動化するC#.NET2.0スクリプトを作成しようとしています。
私はuser32.dll関数を使用して、Javaアプリウィンドウと対話できるようにしています。
私の問題は、Javaアプリのウィンドウが完全に読み込まれるのが遅く、送信されたアクションIntPtr SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, IntPtr lParam)
が失われることがあることです。例:メインウィンドウの読み込み中にメニューを開こうとすると(現時点では実際にメインウィンドウにハンドルがあります)、メッセージが失われ、メニューが開かなくなります。
Stack OverflowProcess.WaitForInputIdle()
でその目的にこのメソッドを使用できるという回答をいくつか見つけましたが、これはアプリがモノスレッドの場合にのみ機能することを発見しました。これは私のJavaアプリの場合ではありません。(C#SendKeysは、プログラムがロードされるのを待ってから送信します)
同じアイデアで機能するものを探していますが、マルチスレッドやその他のアイデアをサポートしていますか?!:)
Mari9のアイデアに従って、私はついにSystem.Diagnostic.PerformanceCounter()
サードパーティのアプリプロセスアクティビティを監視するためにを使用しました。次に、0になります。これは、プロセスが実行しなければならなかったことを実行し、送信したメッセージを実行できることを意味します。
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "% Processor Time";
PC.InstanceName = "<process name>";
Console.WriteLine(PC.NextValue().ToString());