加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:40:19 所属栏目:Windows 来源:网络整理
导读:我有一个应用程序,需要在链中运行其他几个应用程序.我通过ShellExecuteEx运行它们.运行每个应用程序的顺序非常重要,因为它们相互依赖.例如: Start(App1);If App1.IsRunning then Start(App2);If App2.IsRunning then Start(App3);.........................
我有一个应用程序,需要在链中运行其他几个应用程序.我通过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已经启动依赖于App1的App2,并且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:我不明白你为什么删除你的答案?我可能会尝试你的想法……

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

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读