程序用于A进程 关闭 B进程,如下代码中,vProcessID 是B进程的PID,关闭B进程后,openprocess的返回值AHandle始终不为0,请问是什么原因,该如何通过vProcessID 来检测进程已经被关闭了? repeat
AHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, vProcessID); if AHandle<>0 then
begin
GetExitCodeProcess(AHandle,exitcode);
terminateprocess(AHandle,exitcode);
end; until AHandle=0;
AHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, vProcessID); if AHandle<>0 then
begin
GetExitCodeProcess(AHandle,exitcode);
terminateprocess(AHandle,exitcode);
end; until AHandle=0;
2.返回值并不代表一切,关注一下GetLastError
AHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, vProcessID);
if AHandle <> 0 then
begin
repeat
Terminateprocess(AHandle,exitcode);
until GetExitCodeProcess(AHandle,exitcode) and (exitcode <> STILL_ACTIVE);
CloseHandle(AHandle)
end;
谢谢,这个方法可用。我想知道 用 GetExitCodeProcess(AHandle,exitcode) and (exitcode <> STILL_ACTIVE) 来判断和通过快照枚举所有PID,进行判断的方法谁更准确。
但是如果是进程自己结束自己,那么通过快照枚举所有PID更准确。因为它的退出码如果恰好指定为STILL_ACTIVE(比如ExitProcess(STILL_ACTIVE)),那么GetExitCodeProcess就不能正确判断了另外7楼的代码不够严谨,改成这样: