2011-06-27 59 views
6

我正在使用ShellExecuteEx来启动应用程序。 成功后开始即时阅读TShellExecuteInfo.hProcess获取启动过程的句柄。如何检查给定进程是否正在运行时有其句柄

我想定期检查我的应用程序启动的进程是否仍在运行。 两个或多个具有相同名称的进程可以同时运行,我想确保我的应用程序正在检查正确的进程。

我希望能够在Windows 2000以上的Windows系统上执行此操作。

我知道有WinAPI的功能GetProcessId这是做正是我想要的,但它不支持Windows 2000

谢谢您的解答。

+0

既然您已经掌握了这个过程,我不知道您的意思是“我想确保我的应用程序正在检查正确的过程”。既然你已经有了手柄,它怎么会不是正确的过程呢? –

+0

@David我觉得我需要强调我的要求,以防万一somone可以建议我这样的解决方案:http://www.delphitricks.com/source-code/windows/check_if_a_process_is_running.html – Wodzu

回答

14

在该句柄上调用WaitForSingleObject,并使用超时参数为零。如果进程仍在运行,该函数将返回Wait_Timeout;如果进程已经终止,那么它将返回Wait_Object_0(因为进程终止导致其手柄成为信号

如果你想知道什么进程的退出状态,然后调用GetExitCodeProcess

+0

你可以调用'GetExitCodeProcess '再次测试返回值'STILL_ACTIVE'。 –

+1

除非退出代码*是*'Still_Active',@David。那么你仍然需要一些其他的方式来区分,如果你不真正*关心*退出代码是什么,也可以调用'WaitForSingleObject'。 –

+0

非常感谢您的帮助:) – Wodzu

相关问题