2012-02-27 29 views
0

私はWPF/C#ベースの "シェル"を使ってWPFアプリケーションや他のアプリケーションを起動しました。外部WPFプロセスやその他のプロセスが起動したかどうかを確認する方法は?

プロセスが最終的に完全に起動したかどうかをチェックする最善の方法は何ですか?私は、起動されたプロセスのマウスカーソルが最初の起動からビジーカーソルにとどまり、最終的にそのプロセスのUIを見ることができることに気付きました。 User32.SetCapture APIを使用してマウスキャプチャを外部プロセスに設定し、マウスカーソルがビジーカーソルであるかどうかを何とか確認できますか?あるいは、私が気付いていないSystem.Diagnostics.Processクラスのメカニズムがありますか?

起動済みアプリの一部は事前にコンパイルされたサードパーティ製アプリケーションなので、Microsoft PowerPoint 2010 Viewer、Adobe Acrobat、またはAdobeなど、最終的に準備が整ったら、外部プロセスにメッセージを送信するメカニズムは絶対に実装できません。 Flash Playerスタンドアロン。

プロセスが作成されたかどうかだけを確認することはできません。なぜなら、空の応答のないウィンドウとビジーカーソルがあるからです。私は、外部プロセスが開始された瞬間に自分のWPFアプリケーションを非表示にしたいと考えています。

答えて

1

WaitForInputIdle Win32 APi関数は、指定されたプロセスがメッセージループに入る(入力が保留されていない)まで待機します。

引用:"子プロセスとの通信を試みる前に、親プロセスはWaitForInputIdle関数を使用して、子プロセスの初期化がいつ完了したかを判断できます。

P/Invokeから呼び出すことができます。

+0

私はこれを試してみます。 – deavon

0

ない非常にあなたが「beasyを」と言って意味が、聞いてないことは、いくつかの考慮事項ですCEAR:

は知ら(クリア)の方法は、私の知ること少なくとも、ありませんが、あなたが何かをやらせることができますそうですね。事は、processが完全にOSカーネル市民であることです。したがって、すべてのタイプのプロセスで動作するもの、特に3パートバイナリであるものを書くことはできません。あなたが行うにを試すことができますどのような

、あなたは一例WM_ACTIVATEDのために得るそれまでは(いずれかが存在する場合)、プロセスのMainWindowを取得し、そのhandleを取得し、OSメッセージをフィルタです。

しかし、このは、特定の状況ではが動作する可能性がありますが、他のものでは測定できません。たとえば、プロセスがロードされましたが、プログラムはアクティブではありません。原因は何らかの理由でアプリケーションのLicenseウィンドウが表示されたためです。

他の人が何を示唆しているかを見てみましょう。私の意見では、可能性のある少数のケースをカバーするための一般的な解決法はありません。

幸運

関連する問題