gpt4 book ai didi

windows - 使用 ShellExecuteEx 启动外部应用程序并等待其初始化

转载 作者:行者123 更新时间:2023-12-03 01:24:23 27 4
gpt4 key购买 nike

我有一个应用程序需要运行链中的其他几个应用程序。我通过 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 .

我不知道是否可以用 ShellExecuteEx 解决这个问题,我尝试过使用

SEInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;

但没有任何效果。

启动AppN后应用程序我有一个进程的句柄。如果我假设应用程序在创建主窗口后初始化(所有应用程序都有一个窗口),我可以以某种方式在其消息队列上放置一个钩子(Hook)并等到 WM_CREATE出现或可能 WM_ACTIVATE ?一旦收到此类消息,我的应用程序就会知道它可以继续前进。

这只是一个想法。但是,我不知道如何放置这样的钩子(Hook)。因此,如果您能在这方面帮助我或者您有更好的想法,那就太好了:)

此外,该解决方案必须适用于 Windows XP 及更高版本。

感谢您的宝贵时间。

已编辑

@Cosmic Prund:我不明白你为什么要删除你的答案?我可以试试你的想法...

最佳答案

您可以通过调用WaitForInputIdle()来实现您所需要的在 ShellExecute() 返回的每个进程句柄上。

Waits until the specified process has finished processing its initial input and is waiting for user input with no input pending, or until the time-out interval has elapsed.

关于windows - 使用 ShellExecuteEx 启动外部应用程序并等待其初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com