Wie programmiere ich programmgesteuert C#, um eine Liste laufender (Desktop-) Anwendungen zu erhalten? Denken Sie an die Windows Task-Manager-Anwendungsliste.Anzeige Ausführen der Anwendungsliste des Desktops mit C#
Antwort
Sie können Process.GetProcesses
method verwenden, um Informationen zu allen Prozessen bereitzustellen, die derzeit auf Ihrem Computer ausgeführt werden.
Es werden jedoch alle laufenden Prozesse angezeigt, einschließlich derer, die nicht unbedingt in der Taskleiste angezeigt werden. Also, was Sie tun müssen, um diese Prozesse herauszufiltern, die eine leere MainWindowTitle
.Der haben oben verlinkte Dokumentation erklärt, warum dies funktioniert:
Verfahren ein Hauptfenster mit ihm verbunden hat nur dann, wenn der Prozess hat eine grafische Oberfläche. Wenn der zugehörige Prozess kein Hauptfenster hat (MainWindowHandle ist null), MainWindowTitle ist eine leere Zeichenfolge ("").
So konnten Sie so etwas wie den folgenden Code verwenden, die (zu einem Konsolenfenster) auszudrucken wird eine Liste aller aktuell laufenden Anwendungen, die auf der Taskleiste sichtbar sind:
Process[] processes = Process.GetProcesses();
foreach (var proc in processes)
{
if (!string.IsNullOrEmpty(proc.MainWindowTitle))
Console.WriteLine(proc.MainWindowTitle);
}
- 1. Reserviert Teil des Desktops
- 2. Doppelte Symbole in der Anwendungsliste
- 3. Problem mit Desktops
- 4. Fenster zum Ein- und Ausschieben des Desktops
- 5. Programmatisch ScreenShot des Desktops in Ruby nehmen?
- 6. So erhalten Sie Mac Größe des Desktops
- 7. Erfassen des Desktops mit Windows Media Format (WMF)
- 8. C# Anzeige der Abfrage
- 9. Anzeige der Einstellungen des Webbrowsers
- 10. Anzeige Wert des Wörterbuchs in C#
- 11. Ändern Helligkeit der Anzeige (C#)
- 12. Anzeige des Ergebnisses der Datumsauswahl
- 13. Tastatur-Hook interagieren mit allen Desktops C++ Win32
- 14. Get installiert Anwendungsliste in UWP
- 15. Verwendung eines Monitors, der nicht Teil des Desktops ist (Windows 7)
- 16. Wie man Anwendung von der letzten Anwendungsliste entfernt?
- 17. Sitzungen, Fensterstationen und Desktops
- 18. Schnelle Anzeige der Wellenform in C/C++
- 19. Anzeige des Kalenderwerts
- 20. Falsche Anzeige des Menüeintrags
- 21. Screenshot des Desktops erstellen, wenn Windows gesperrt ist (Win + L)
- 22. Schnelle Anzeige des Bildes mit openCV
- 23. Anzeige MBProgressHUD in der Mitte des UISplitViewController
- 24. Probleme bei der Anzeige der LOESS-Regressionslinie und des Konfidenzintervalls
- 25. Anzeige des aktuellen Standorts des Geräts auf der Karte Xamarin.Forms
- 26. Probleme mit der Anzeige des Bildes im Fenster
- 27. Anzeige des Namens der kurzen Zeitzone mit DateTimeFormatter
- 28. Anzeige des Textblocks
- 29. Anzeige des '£' und '€' Symbols mit XSL
- 30. Gibt es eine Möglichkeit, einen Screenshot des Windows-Desktops des Benutzers zu erstellen?
+1: Gute Antwort. –
Ich entschuldige mich für diese 2 Jahre später Kommentar, aber ich bin auf der Suche nach einer ähnlichen Lösung und wollte erwähnen, dass die obige Lösung nicht funktioniert (AFAIK) in Fällen wie WORD oder ACRO-READER, die mehrere haben können Dokument auf dem Desktop geöffnet. In diesem Fall scheint nur das oberste Fenster als Anwendung mit der obigen Methode aufgelistet zu sein. Wenn ich falsch liege, entschuldige ich mich, aber wenn ich richtig liege, würde ich gerne wissen, wie man alle Fenster auflistet, auch wenn sie aus dem gleichen zugrundeliegenden Prozess stammen (wie Akkord oder Wort). –
@Ed. Ja, das listet Prozesse auf, aber diese Anwendungen führen nur einen einzigen Prozess aus. Es ist unwichtig, dass der Prozess mehrere Top-Level-Fenster verwaltet. Sie können Fenster der obersten Ebene mit der [EnumWindows-Funktion] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633497.aspx) auflisten. Rufen Sie diese Funktion auf und geben Sie einen Zeiger auf eine Callback-Funktion an. Die Callback-Funktion wird für jedes Top-Level-Fenster auf dem Bildschirm einmal aufgerufen. –