我想获得第二个实例的pid,其中第二个实例具有相同的调用进程名称。这是怎么回事?
例如:
一个典型的例子是谷歌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;
答案 0 :(得分:2)
删除终止迭代的break
。这样您就可以找到所有匹配的流程。显然,你需要返回一个进程ID列表而不是一个进程ID,但我认为你知道如何做到这一点。