2009-04-11 7 views
13

Ich möchte das Fenster einer anderen Anwendung über die Taskleiste ausblenden können, ohne das Fenster selbst zu verbergen. Insbesondere möchte ich mehrere verschiedene Webbrowser ausführen, sichtbar, verfügbar in der Alt + Tab-Liste, aber nicht Platz in der Taskleiste belegen.Die Taskleistenschaltfläche einer anderen App ausblenden

(Wenn jemand neugierig ist, warum: Ich habe eine Dashboard-App geschrieben, die Vistas DwmRegisterThumbnail-APIs verwendet, um Live-Vorschauen von mehreren Fenstern auf einmal zu zeigen - eine Art "Bild im Bild", wenn Sie so wollen. Außerdem scheint die Taskleiste für diese Fenster überflüssig zu sein.)

Ich bin mir bewusst, dass das Ändern des Stils des anderen Fensters, um WS_EX_TOOLWINDOW einzuschließen, es vor der Taskleiste verbergen wird, und ich versuchte das zuerst. Aber wie erwartet hatte es einige Nebenwirkungen, die ich nicht wollte: Die Titelleiste wurde kürzer (nicht alles schlecht, denke ich) und die Schaltflächen zum Minimieren und Maximieren verschwanden (nicht gut). Ich musste auch das Fenster verstecken und erneut anzeigen, damit die Taskleiste die Änderung erkannte, was zu neu streichenden Artefakten führte, wenn ich es in IE-Fenstern machte.

Mein nächster Gedanke war, dass, da Fenster mit Besitzern standardmäßig von der Taskleiste ausgeblendet sind, ich vielleicht die anderen Fenster ändern könnte, die meinem gehören. Aber MSDN ist pretty clear dass "nach dem Erstellen eines eigenen Fensters kann eine Anwendung das Eigentum des Fensters nicht auf ein anderes Fenster übertragen."

Ich fand this question das ist ähnlich wie meins formuliert, aber es ist speziell über Windows aus Ihrem eigenen Prozess, wo Sie die vollständige Kontrolle über Fenster Besitz haben.

Kennt jemand andere Möglichkeiten zum Verstecken einer Taskleiste, die für Windows von einem anderen Prozess funktioniert?


Update: Tormod hat mich auf dem richtigen Weg mit ITaskbarList - es funktioniert gut. Die pinvoke.net-Seite hatte einige Fehler (falsche GUID, Methoden alphabetisch statt in der Reihenfolge der Schnittstellen deklariert), aber ich habe sie bearbeitet, Korrekturen vorgenommen und ein Beispiel hinzugefügt, wie man die ITaskbarList über ihre Co-Klasse instanziiert.

Update 2: Wenn Sie DeleteTab ein Fenster der Taskleiste Schaltfläche, sich zu verstecken und dann, dass das aktive Fenster (beispielsweise über SetForegroundWindow oder Alt + Tab), wird seine Taskleiste Schaltfläche erneut angezeigt. Um den Taskleisten-Button zu verbergen, musste ich einen Timer hinzufügen und DeleteTab aufrufen. Solange es Ihnen nichts ausmacht, dass der Taskleisten-Button immer wieder erscheint, wenn das Fenster fokussiert wird, funktioniert das gut.

Antwort

6

Von MSDN:

Version 4.71 und später von Shell32.dll fügt die Fähigkeit, den Inhalt der Taskleiste zu ändern. In einer Anwendung können Sie jetzt Taskleistenschaltflächen hinzufügen, entfernen und aktivieren. Aktivieren des Elements aktiviert das Fenster nicht; Es zeigt das Element an, das in der Taskleiste gedrückt wird.

Die Taskleistenmodifikationsfunktionen sind in einem COM-Objekt (COM-Objekt) implementiert (CLSID_TaskbarList), das die ITaskbarList-Schnittstelle (IID_ITaskbarList) verfügbar macht. Sie müssen die ITaskbarList :: HrInit-Methode aufrufen, um das Objekt zu initialisieren. Sie können dann die Methoden der ITaskbarList-Schnittstelle verwenden, um den Inhalt der Taskleiste zu ändern.

Es scheint wie COM-Interop ist der Weg zu gehen, um den Inhalt der Taskleiste zuverlässig zu manipulieren.Insbesondere müssten Sie folgende Funktionen aufrufen:

Sie die C# -Signatur für die ITaskbarList Schnittstelle an pinvoke.net: ITaskbarList finden.

+0

Süße - Ich wusste nie darüber, aber es klingt wie das Ticket. Vielen Dank! –

0

Haben Sie versucht, WS_EX_APPWINDOW zu entfernen?

+0

Ja, tat ich. Das funktioniert nur, wenn die andere App "WS_EX_APPWINDOW" an erster Stelle hinzufügen musste, z. wenn es ein Besitzerfenster hatte. Gewöhnliche Top-Level-Fenster benötigen kein 'WS_EX_APPWINDOW', also ist es nicht zum Entfernen da. –

Verwandte Themen