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

时间:2015-06-27 20:30:11

标签: c++ winapi

我写了一个简单的 win32 程序说abc.exe

我在其中添加了一个按钮,点击外部 exe xyz.exe应该开始。

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

怎么可以呢? 如果您可以发布示例代码,那就太棒了。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

按下按钮时,使用CreateProcess函数创建'xyz.exe'进程,并将新进程'句柄(hProcess保存在PROCESS_INFORMATION结构中CreateProcess 1}})。

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