Frage

Kann mir jemand sagen, wie ich einen Laufprozess in C# mit der Prozessklasse erfassen kann, wenn ich das Griff bereits kenne?

Ich musste die Methode von GetRunning Process -Methoden eher nicht aufzählen. Pinvoke ist wenn möglich in Ordnung.

War es hilfreich?

Lösung

In Plain C#sieht es so aus, als müssten Sie sie alle durchlaufen:

// IntPtr myHandle = ...
Process myProcess = Process.GetProcesses().Single(
    p => p.Id != 0 && p.Handle == myHandle);

Das obige Beispiel scheitert absichtlich, wenn der Griff nicht gefunden wird. Andernfalls könnten Sie natürlich verwenden SingleOrDefault. Anscheinend mag es nicht, dass Sie das Handwerk von Prozess -ID anfordern 0, daher der zusätzliche Zustand.

Mit dem WinAPi können Sie verwenden GetProcessId. Ich konnte es nicht auf Pinvoke.net finden, aber das sollte es tun:

[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);

(Signatur verwendet a DWORD, aber Prozess -IDs werden durch dargestellt ints in der .NET BCL)

Es scheint ein bisschen seltsam, dass Sie einen Griff haben würden, aber keine Prozess -ID. Prozessgriffe werden durch Anrufe erworben OpenProcess, was eine Prozess -ID nimmt.

Andere Tipps

using System.Diagnostics;

class ProcessHandler {
    public static Process FindProcess( IntPtr yourHandle ) {
        foreach (Process p in Process.GetProcesses()) {
            if (p.Handle == yourHandle) {
                return p;
            }
        }

        return null;
    }
}

Es scheint keine einfache Möglichkeit zu geben, dies von der .NET -API zu tun. Die Frage ist, woher du diesen Griff hast? Wenn Sie auf die gleiche Weise Zugriff auf die Prozess -ID erhalten, können Sie verwenden:

Process.GetProcessById (int iD)

Sie können den GetWindowThreadProcessid WinAPi -Anruf verwenden

http://www.pinvoke.net/default.aspx/user32/getwindowthreadprocessid.html

Um die Prozess -ID zu erhalten, erhalten Sie ein Prozessobjekt mit diesem .....

Aber warum möchten Sie die IDs der laufenden Prozesse nicht aufzählen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top