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

Open a programm and know if it is open

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

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

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

On Windows 如果您使用 CreateProcess() 而不是 system() 来启动新进程。简化代码:

PROCESS_INFORMATION processInformation;
CreateProcess(..., &processInformation);

PPROCESS_INFORMATION 中找到它的句柄。使用它的句柄,您可以等待它终止(模仿 system() 的工作方式):

WaitForSingleObject(processInformation.hProcess, INFINITE);

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

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

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

CloseHandle(processInformation.hProcess);

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

调用 system ("C:\AAA.exe"); 您可以阻塞直到进程 AAA.exe 完成。

如果不能接受,可以在单独的线程中调用system ("C:\AAA.exe");,检查是否完成。

#include <thread>


void threadRoutine()
{
    ::system("C:\AAA.exe");
}

int main()
{
    std::thread systemCall(threadRoutine);
    //do some work here
    systemCall.join();
    //you are sure that AAA.exe is finished
    return 0;
}