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.
Süße - Ich wusste nie darüber, aber es klingt wie das Ticket. Vielen Dank! –