如何获取使用与调用进程相同的名称创建的子进程的 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,但我想您知道如何做到这一点。
我想要获取进程的第二个实例的 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,但我想您知道如何做到这一点。