在子窗口(C++,win32)中执行外部exe

Executing external exe in a child window (C++, win32)

本文关键字:执行 外部 exe win32 窗口 C++      更新时间:2023-10-16

我写了一个简单的win32程序,比如abc.exe

我在其中添加了一个按钮,单击该按钮可以启动外部exe,比如xyz.exe

但是当xyz.exe正在运行时,原始程序(即abc.exe)应该是不可访问的。(与消息框的情况相同,除非消息框关闭,否则父窗口保持非活动状态)

我该怎么做?如果你能发布一个示例代码,那就太好了。

您可以使用WaitForSingleObject(IIRC)来等待新进程终止。您可以在等待之前使您的窗口不可见(例如通过ShowWindow)。首先检查是否成功启动。

按下按钮时,使用CreateProcess函数创建"xyz.exe"进程,并保存新进程的句柄(CreateProcess中传递的PROCESS_INFORMATION结构中的hProcess)。

然后,您可以通过调用EnableWindow并将bEnable设置为FALSE来禁用"abc.exe"窗口。在处理WM_PAINT消息的"abc.exe"窗口过程中,添加一个检查"xyz.exe"进程是否仍在运行。您可以使用前面保存的句柄的GetExitCodeProcess函数,并检查返回值是否为STILL_ACTIVE。如果"xyz.exe"进程不再处于活动状态,则可以再次使用EnableWindow启用"abc.exe"窗口。