2016-12-12 1 views
0

Je veux obtenir le pid de la deuxième instance d'un processus où cette seconde instance a le même nom de processus appelant. Comment ça?Comment obtenir pid d'un sous-processus créé avec le même nom de processus appelant?

Par exemple:

un exemple classique est Google Chrome (plusieurs instances avec le même nom "chrome.exe") voir ci-dessous.

enter image description here

J'ai utilisé ce code suivant, mais j'obtient pid seulement processus appelant:

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; 

Répondre

3

Retirez le break qui met fin à l'itération. De cette façon, vous trouverez tous les processus correspondants. Évidemment, vous devrez retourner une liste d'ID de processus au lieu d'une seule, mais je suppose que vous savez comment faire cela.

+1

vous pouvez éditer votre réponse avec un exemple de code obtenant seulement la deuxième instance s'il vous plaît? Je vous remercie. – Saulo

+3

Vous voulez juste la deuxième instance. Eh bien, ignorez le premier et revenez dans le deuxième match. Utilisez une variable pour compter. Savez-vous comment déclarer une variable entière? Savez-vous comment incrémenter un. Savez-vous comment tester si elle est égale à une valeur spécifique. –

+1

Je me demande aussi si vous comprenez quelque chose sur le code existant. Si vous le faisiez, je m'attendrais à ce que vous soyez capable de le faire vous-même. Si vous ne le comprenez pas, vous nous demandez simplement de vous donner du code. Êtes-vous prêt à essayer d'apprendre quelque chose de nouveau? –