Windows 如何在有句柄时检查给定进程是否正在运行

Windows 如何在有句柄时检查给定进程是否正在运行,windows,delphi,process,handle,Windows,Delphi,Process,Handle,我正在使用ShellExecuteEx启动一个应用程序。 成功启动后,im读取TShellExecuteInfo.hProcess,以获取已启动进程的句柄 我希望定期检查应用程序启动的进程是否仍在运行。 两个或多个同名进程可以同时运行,我希望确保我的应用程序正在检查正确的进程 我希望能够在Windows 2000或更高版本的Windows系统上执行此操作 我知道有一个WinAPI函数GetProcessId,它正是我想要的,但它不支持windows2000 谢谢您的回答。调用该句柄,并使用超时参

我正在使用
ShellExecuteEx
启动一个应用程序。 成功启动后,im读取
TShellExecuteInfo.hProcess
,以获取已启动进程的句柄

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

我希望能够在Windows 2000或更高版本的Windows系统上执行此操作

我知道有一个WinAPI函数
GetProcessId
,它正是我想要的,但它不支持windows2000

谢谢您的回答。

调用该句柄,并使用超时参数零。如果进程仍在运行,函数将返回
Wait_Timeout
;如果进程已终止,则它将返回
Wait\u Object\u 0
(因为进程终止会导致其句柄发出信号。)


如果您想知道进程的退出状态是什么,请调用。

您只需调用
GetExitCodeProcess
再次测试返回值
STILL\u ACTIVE
。除非退出代码是
STILL\u ACTIVE
,@David。然后你还需要一些其他的方法来区分,如果你实际上不关心退出代码是什么,不妨调用
WaitForSingleObject
。非常感谢你的帮助:)最好用大写字母拼写Wait_Timeout,以便更容易地剪切粘贴(+1;-)@RobKennedy我打算改进一下。第二次,我意识到我走得有点远,只修好了必要的东西。我甚至连第二次的排字都没改。这个问题不是德尔福独有的。使用Delphi的唯一可能指示是标记。实际上,它更适合标记
winapi
而不是
delphi
,因为问题在于如何使用windowsapi。我在谷歌上发现了这个问题,试图解决C语言中的同样问题。我不想发动一场编辑大战,但恢复一个能使答案更适用的编辑是荒谬的。既然你掌握了这个过程,我不知道你说的“我想确保我的应用程序正在检查正确的过程”是什么意思。既然你已经有了这个把柄,那怎么可能不是正确的过程呢?@David我觉得我需要强调我的要求,以防有人能向我建议这样的解决方案: