他のいくつかのアプリケーションをチェーンで実行する必要があるアプリケーションがあります。経由で実行してい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
、プロセスへのハンドルがあります。メインウィンドウが作成された後にアプリケーションが初期化されると仮定すると(すべてのアプリにウィンドウがあります)、メッセージキューにフックを配置して、表示されるまで待つことはできますWM_CREATE
かWM_ACTIVATE
?このようなメッセージが表示されると、アプリケーションは先に進むことができることを認識します。
それはただのアイデアです。しかし、そのようなフックの付け方がわかりません。あなたがこれで私を助けることができれば、またはあなたは素晴らしいだろうより良いアイデアを持っています:)
また、ソリューションは Windows XP 以降で動作する必要があります。
御時間ありがとうございます。
編集済み
@Cosmic Prund: なぜ回答を削除したのかわかりません。あなたのアイデアを試すかもしれません...