Я хотел бы иметь возможность скрывать окно другого приложения на панели задач, не скрывая самого окна. В частности, я хочу, чтобы несколько различных веб-браузеров работали, видимы, доступны в списке Alt + Tab, но не занимали место на панели задач.Скрыть кнопку на панели задач другого приложения
(Если кому-то любопытно, почему: я написал приложение панели мониторинга, которое использует API DwmRegisterThumbnail API Vista, чтобы показывать живые предварительные просмотры нескольких окон одновременно - своего рода «картинка на картинке», если хотите. В этот момент, также имеет кнопки панели задач для этих окон, кажется избыточным.)
Я знаю, что изменение стиля другого окна, чтобы включить WS_EX_TOOLWINDOW
, скроет его с панели задач, и я попробовал это первым. Но, как и ожидалось, у него были некоторые побочные эффекты, которых я не хотел: заголовок был короче (не все плохо, я думаю), и кнопки с минимизацией и максимизацией исчезли (не хорошо). Мне также пришлось скрыть и снова показать окно, чтобы панель задач распознала изменение, которое вызвало перекраску артефактов, когда я сделал это в IE-окнах.
Моя следующая мысль заключалась в том, что, поскольку окна с владельцами по умолчанию скрыты от панели задач, возможно, я мог бы изменить другие окна, которые будут принадлежать моей. Но MSDN - это pretty clear, что «[a] создать собственное окно, приложение не может передать право собственности на окно в другое окно».
Я нашел this question, который сформулирован так же, как и мой, но это касается окон вашего собственного процесса, где у вас есть полный контроль над владением окнами.
Кто-нибудь знает какие-либо другие способы скрыть кнопку на панели задач, которая будет работать для окон из другого процесса?
Update: Tormod поставил меня на правильный путь с ITaskbarList - он прекрасно работает. На странице pinvoke.net были некоторые ошибки (неправильный GUID, методы, объявленные в алфавитном порядке, а не в порядке интерфейса), но я отредактировал его, внесла исправления и также добавил пример того, как создать экземпляр ITaskbarList через свой класс.
Update 2: Если вы используете DeleteTab скрыть кнопку на панели задач оконном, а затем сделать что активное окно (например, с помощью SetForegroundWindow
или Alt + Tab), ее кнопка на панели задач появится снова. Чтобы скрыть кнопку панели задач, мне пришлось добавить таймер и продолжить вызов DeleteTab. До тех пор, пока вы не возражаете, кнопка кнопки панели появляется снова, когда окно становится сфокусированным, это работает хорошо.
Sweet - я никогда не знал об этом, но это звучит как билет. Благодаря! –