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

How get pid of a subprocess created with the same name of calling process?

我想要获取进程的第二个实例的 pid,其中第二个实例与调用进程具有相同的名称。这是怎么做到的?

例如:

一个经典的例子是Google Chrome(几个同名的实例"chrome.exe")见下文。

我在下面使用了这段代码,但我只获得了调用进程的 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;

删除终止迭代的break。这样你就会找到所有匹配的进程。显然,您需要 return 进程 ID 列表而不是单个进程 ID,但我想您知道如何做到这一点。