2016-12-12 12 views
0

私は、この2番目のインスタンスが呼び出しプロセスの名前が同じであるプロセスの2番目のインスタンスのpidを取得したいと思います。これはどうですか?呼び出し元プロセスと同じ名前で作成されたサブプロセスのPIDを取得するにはどうすればよいですか?

例:

古典的な例は、Google Chromeのである(同じ名前 "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

2番目のインスタンスのみを取得するコード例を使用して回答を編集できますか?ありがとうございました。 – Saulo

+3

2番目のインスタンスが必要です。さて、最初のものを無視し、2回目の試合に戻ります。カウントするには変数を使用します。整数変数を宣言する方法を知っていますか?それを増やす方法を知っていますか?それが特定の値と等しいかどうかをテストする方法を知っていますか? –

+1

私は、既存のコードについて何かを理解しているのだろうかと思います。あなたがした場合、私はあなたがこれを自分で行うことができると期待しています。あなたがそれを理解していなければ、コードをスプーンでフィードするように頼んでいるだけです。あなたは新しい何かを学ぼうとする準備ができていますか? –

関連する問題