Wie man Aktiven Prozess-Namen, die in C#?
How to get aktiven Prozess-Namen, die in C#?
Ich weiß, dass ich muss diesen code verwenden:
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
aber ich weiß nicht, wie es zu benutzen.
Sie sollten beachten, dass Sie versuchen, zu verwenden
GetForegroundWindow
zusammen mit anderen Funktionen (z.B. GetProcessesByName
, wie gezeigt, die von Gustavo ' s Antwort), unter race-Bedingungen. Das system kann dann zwischen der Erlangung der Rückgabewerte jeder Funktion (egal, in welcher Reihenfolge Sie genannt werden, in), so dass Sie nicht in der Lage zu garantieren, finden die entsprechenden Werte aus den beiden. Vielleicht, wenn Sie erklären, was Sie zu tun beabsichtigen mit diesem Wert, eine bessere Reaktion gewonnen werden könnten.InformationsquelleAutor p.eon13 | 2011-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits in diese Antwort, müssen Sie
GetWindowThreadProcessId()
zu Holen Sie sich die Prozess-id für das Fenster und dann können Sie dieProcess
:Sich bewusst sein, dass dies scheint eine Ausnahme geworfen ("Ein 32-bit-Prozesse können nicht Zugriff auf Module eines 64-bit-Prozess"), wenn Sie von einer 32-bit-Anwendung, wenn der aktive Prozess ist 64-bit.
EDIT: Als Damien wies darauf hin, dieser code ist anfällig für race conditions, weil der Prozess, der das aktive Fenster ist an der Zeit, wenn
GetForegroundWindow()
genannt wurde, die möglicherweise nicht mehr existieren, wennGetWindowThreadProcessId()
genannt wird. Noch schlimmer ist die situation wäre, wenn die gleiche hwnd würde zugewiesen werden, um ein weiteres Fenster zu dieser Zeit, aber ich denke, das sollte wirklich selten.Ich habe es noch nicht getestet, aber
GetProcessImageFileName
wohl nicht die 64 bit-problem.mit
p.processName
stattp.MainModule.FileName
vermeidet 32-64bit cant access FehlerInformationsquelleAutor svick
Ich würde vorschlagen, mit
System.Diagnostics.Process
.Als alternative können Sie verwenden:
GetForegroundWindow()
ich glaube, er will den Prozess, der das derzeit aktive Fenster und nicht den aktuellen Prozess.Ah, stimmt. Brainfart. 🙂
InformationsquelleAutor Ostemar
Sein müssen nur zwei Zeile code, können Sie linq, um alle Prozesse.
Jetzt haben Sie alle aktiven Prozesse, indem Sie einfach on-line.
InformationsquelleAutor khaled Dehia
Hier ist ein link eine genaue Beschreibung der Sache, die Sie tun möchten:
http://www.blackwasp.co.uk/GetActiveProcess.aspx
Und eine weitere Beschreibung der
GetForegroundWindow
Funktion, die ich unten kopieren.Beachten Sie, dass Sie benötigen, verweisen einige zusätzliche Baugruppen, für die dieser code funktioniert.
Blick auf die MSDN-für jede Funktion. Beispiel
GetProcessesByName
erfordert System.Diagnostik.InformationsquelleAutor Gustavo Mori