Frage

Ich versuche, einen Weg zu finden, um die offenen Aufgaben in C # zu erhalten. Ich habe auf Google gesucht und kann nur finden, wie eine Liste der Prozesse erhalten . Ich mag die nur die Aufgaben, die in der Taskleiste auftauchen würde.

Auch mit, dass, wäre es cool, wenn ich den Prozess wird die Aufgabe mit zugehörigem bekommen kann. Und wenn möglich, die Thumbnail-Bilder erhalten, die Vista verwendet für das ALT-TAB-Menü, wie in diesem Bild:

Ich gehe davon aus, dass ich pinvokes verwenden müssen, weil es wirklich nicht so aussieht es keine Bibliotheken sind dies bereits zu tun. Irgendwelche Ideen?

War es hilfreich?

Lösung

Dieser Artikel sollte so ziemlich sagen Ihnen genau, was zu tun ist, es zeigt, wie Sie Ihre eigene Aufgabe Schalter zu bauen und enthält den Code erforderlich, um alle Fenster aufzuzählen und bestimmen, ob sie „Aufgaben“ sind und es zeigt Ihnen, wie Printwindow api verwenden die Vorschauen auf XP zu erhalten.

http://msdn.microsoft.com/en-us/library /ms997649.aspx

Auch hier ist einen Blog-Post dass die Gespräche über den Algorithmus verwendet, um zu bestimmen, was in der Alt + Tab-Ansicht zeigt nach oben. Grundsätzlich müssen Sie die WS_EX_APPWINDOW überprüfen und WS_EX_TOOLWINDOW zusammen mit, wenn das Fenster einen Eigentümer hat.

Andere Tipps

Von einer API (Win32) Perspektive gibt es nicht so etwas wie Aufgaben (zumindest nicht die, die Windows-Task-Manager / Alt-Tab zeigt).

Diese "Aufgaben" sind eigentlich Top-Level-Fenster.

Also, um eine Liste von denen zu erhalten, müssen Sie PInvoke es).

Schauen Sie sich die Art des Fensters, um zu bestimmen, ob sie tatsächlich Top-Level-Fenster sind.

Ich habe nicht versucht, aber ich vermute, so etwas wie folgt aus:

using System.Diagnostics;
static void MyFunc()
{
    Process[] processes = Process.GetProcesses();
    foreach(Process p in processes)
    {
       if (p.MainWindowHandle != 0)
       { // This is a GUI process
       }
       else
       { // this is a non-GUI / invisible process
       }
    }
}

Der Punkt ist, jeden Prozess für einen Window zu überprüfen.

@ abelenky17

Ich vermute, dass dies nicht alle Fälle abdecken, zum Beispiel gibt es Prozesse gibt, die mehrere Top-Level-Fenster haben (dass alle im Task-Manager angezeigt werden). Betrachten Sie zum Beispiel: FireFox, Windows Explorer, IE, etc ... können diese Anwendungen haben mehrere Fenster auf dem Desktop. Auch wird es nicht Terminal-Sessions-Szenario ordnungsgemäß behandeln (weil Sie aufzählen, alle Prozesse im System ausgeführt wird).

@ Dan C.

mache ich etwas wie folgt aus:

p.ProcessName != "explorer"

scheint Ihnen gut? Es riecht, schlecht.

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