打开一个程序,知道它是否打开

时间:2016-01-29 09:48:44

标签: c++ windows process

我想用C ++编写一个可以打开.exe程序的程序,我想知道用户何时关闭它。我知道我可以通过以下代码打开程序:

system ("start C:\\AAA.exe");

但是,我不知道如何检查程序是否已关闭。

2 个答案:

答案 0 :(得分:3)

在Windows上,如果您使用system()而不是PROCESS_INFORMATION processInformation; CreateProcess(..., &processInformation); 来启动新流程。简化代码:

PPROCESS_INFORMATION

system()中找到它的句柄。有了它的句柄,你可以等待它终止(模仿WaitForSingleObject(processInformation.hProcess, INFINITE); 的工作方式):

DWORD exitCode;
BOOL isActive = STILL_ACTIVE == GetExitCodeProcess(processInformation.hProcess, &exitCode);

如果您的代码必须与子进程一起运行,请定期检查其状态是否获取其退出代码(如果有,请参阅How to determine if a Windows Process is running?):

CloseHandle(processInformation.hProcess);

不要忘记关闭句柄(即使进程已经终止):

WM_CLOSE

请注意,使用该代码,您不知道进程终止的原因。这可能是因为用户关闭了它的窗口,因为它自己终止或因为它崩溃了。对于GUI应用程序,您可以挂钩其主窗口消息,查找WM_QUIT(以检测用户操作),SetUnhandledExceptionFilter()(应用程序执行此操作)并使用ImageView附加处理程序(以检测未处理的错误) )。它不是100%可靠,但它可能是另一个问题的材料......

答案 1 :(得分:0)

调用LinearSVC您可以阻止,直到进程AAA.exe完成。

如果不可接受,您可以在单独的帖子中调用system ("C:\AAA.exe");,并检查它是否已完成。

system ("C:\AAA.exe");