gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:03:04 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已经在启动依赖于App1App2,而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/6547408/

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