2016-12-12 46 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

我也想知道你是否瞭解現有的代碼。如果你做到了,那麼我希望你自己能夠做到這一點。如果你不理解它,那麼你只是要求我們給你喂碼。你準備嘗試學習新東西嗎? –

相關問題