У меня есть приложение, которое должно запускать несколько других приложений в цепочке. Я запускаю их через ShellExecuteEx
. Порядок запуска каждого из приложений очень важен, потому что они зависят друг от друга. Например:
Start(App1);
If App1.IsRunning then
Start(App2);
If App2.IsRunning then
Start(App3);
.........................
If App(N-1).IsRunning then
Start(App(N));
Все работает нормально, но есть одна возможная проблема:
ShellExecuteEx
запускает приложение и почти сразу возвращается. Проблема может возникнуть, когда, например, App1
запущено правильно, но не завершило некоторые внутренние задачи, оно еще не готово к использованию. Но ShellExecuteEx
уже запускает App2
, который зависит от App1
, и App2
не запускается должным образом, потому что ему необходимо полностью инициализировать ] App1
.
Обратите внимание, что я не хочу ждать, пока App (N-1)
завершится, а затем запустить AppN
.
I не знаю, возможно ли это решить с помощью ShellExecuteEx, я пытался использовать
SEInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;
, но без всякого эффекта.
После запуска приложения AppN
у меня есть дескриптор процесса. Если я предполагаю, что приложение инициализируется после создания его главного окна (все приложения имеют окно), могу ли я каким-то образом установить ловушку для его очереди сообщений и подождать, пока не появится WM_CREATE
или, возможно, WM_ACTIVATE
? При наличии такого сообщения мое Приложение будет знать, что оно может двигаться дальше.
Это просто идея. Однако я не знаю, как поставить такой крючок. Так что, если бы вы могли помочь мне в этом или у вас есть идея получше, это было бы здорово :)
Кроме того, решение должно работать в Windows XP и выше.
Спасибо за ваше время.
Отредактировано
@Cosmic Prund: Я не понимаю, почему вы удалили свой ответ? Я могу попробовать вашу идею ...