2016-12-12 42 views
0

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

如:

一个经典的例子是谷歌浏览器(使用相同的名称“的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; 

回答

3

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

+1

你可以编辑你的答案,只需要获得第二个实例的代码示例?谢谢。 – Saulo

+3

你只需要第二个实例。那么,先忽略第一场,然后回到第二场比赛。使用一个变量进行计数。你知道如何声明一个整型变量吗?你知道如何增加一个。你知道如何测试它是否等于一个特定的值。 –

+1

我也想知道你是否了解现有的代码。如果你做到了,那么我希望你自己能够做到这一点。如果你不理解它,那么你只是要求我们给你喂码。你准备尝试学习新东西吗? –

相关问题