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