如何获得使用相同名称的调用进程创建的子进程的pid?

时间:2016-12-12 19:49:34

标签: delphi subprocess pid

我想获得第二个实例的pid,其中第二个实例具有相同的调用进程名称。这是怎么回事?

例如:

一个典型的例子是谷歌Chrome(几个同名“chrome.exe”的实例),见下文。

enter image description here

我之前使用过这段代码,但我只是调用了进程的pid:

Function ProcessIDFromAppname32( appname: String ): DWORD;
  Var
    snapshot: THandle;
    processEntry : TProcessEntry32;
  Begin
    Result := 0;
    appName := UpperCase( appname );
    snapshot := CreateToolhelp32Snapshot(
                  TH32CS_SNAPPROCESS,
                  0 );
    If snapshot <> 0 Then
    try
      processEntry.dwSize := Sizeof( processEntry );
      If Process32First( snapshot, processEntry ) Then
      Repeat
        If Pos(appname,
               UpperCase(ExtractFilename(
                             StrPas(processEntry.szExeFile)))) > 0
        Then Begin
          Result:= processEntry.th32ProcessID;
          Break;
        End; 
      Until not Process32Next( snapshot, processEntry );
    finally
      CloseHandle( snapshot );
    End; 
  End;

1 个答案:

答案 0 :(得分:2)

删除终止迭代的break。这样您就可以找到所有匹配的流程。显然,你需要返回一个进程ID列表而不是一个进程ID,但我认为你知道如何做到这一点。