私はチェーン内にいくつかの他のアプリケーションを実行する必要のあるアプリケーションを持っています。私はShellExecuteEx
で実行しています。各アプリを実行する順序は、互いに依存しているため非常に重要です。たとえば:ShellExecuteExで外部アプリを起動し、初期化されるまで待つ
Start(App1);
If App1.IsRunning then
Start(App2);
If App2.IsRunning then
Start(App3);
.........................
If App(N-1).IsRunning then
Start(App(N));
すべてが正常に動作しますが、1つ問題がある可能性があります: ShellExecuteEx
は、アプリケーションを起動し、ほとんどすぐに戻ります。たとえば、App1
が正しく開始されていても内部タスクが完了していない場合、問題は発生する可能性があります。しかし、ShellExecuteEx
はすでにApp2
を開始しています。これはApp1
に依存し、App2
は完全に初期化する必要があるため、正しく起動しません。App1
。
App(N-1)
が終了してからAppN
になるのを待つことはできません。
これはShellExecuteExをして解決することができる場合、私は知らないが、私は
SEInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;
が、いかなる影響を与えることなく使用することを試みました。
AppN
アプリケーションを開始した後、私はそのプロセスを扱います。メインウィンドウが作成された後にアプリケーションが初期化されたと仮定すると(Appsのすべてにウィンドウがあります)、メッセージキューにフックを入れてWM_CREATE
が表示されるか、またはWM_ACTIVATE
まで待つことができますか?そのようなメッセージが表示されると、私のアプリケーションはそれが進むことができることを知ります。
これは単なるアイデアです。しかし、私はそのようなフックを置く方法を知らない。だからあなたがこれで私を助けることができれば、それは素晴らしいだろう良いアイデアを持っている:
また、ソリューションはWindows XP以上で動作する必要があります。
お時間をいただきありがとうございます。
編集
@Cosmic PRUND:私はあなたがあなたの答えを削除しなかった理由を理解していませんか?私はあなたの考えを試してみるかもしれません...
WaitForInputIdle(hProcess ... –