Я хочу удалить окно с панели задач в Windows 10 с несколькими рабочими столами.
Для Windows 8.1 я использовал ITaskbarList :: DeleteTab, и он отлично работает.
Для Windows 10 этот метод также скрывает Windows от панели задач, но после этого я вижу это окно на всех рабочих столах. Я хочу видеть это окно только на одном рабочем столе.
Кто-нибудь знает способ скрыть окно от панели задач в Windows 10 и оставить это окно на одном рабочем столе?
Ниже вы можете увидеть, что я имел в виду под «Скрыть окно из панели задач в Windows 10»:
В моем понимании, подтвержденном моими эмпирическими тестами, окна, которые появляются в предварительном просмотре панели задач, являются точно такими же окнами, которые обычно появляются в панели задач. Давным-давно, скажем, в Windows 2000, каждое из подходящих окон приложения просто отображалось в виде кнопок на панели задач. Начиная с Windows XP, группировка панели задач стала опцией, так что все подходящие окна из одного приложения можно было сгруппировать вместе и отображать как одну кнопку на панели задач. Затем в Windows Vista стало возможным отображать предварительный просмотр этих открытых окон, когда вы наводили курсор на соответствующую кнопку панели задач. Ни Windows 8, ни Windows 10 не изменили это фундаментальное правило; они только изменили внешний вид превью.
Таким образом, мы можем вернуться к Документация MSDN для правил о том, какие окна появляются на панели задач:
Оболочка создает кнопку на панели задач всякий раз, когда приложение создает окно, которое не принадлежит. Чтобы убедиться, что кнопка окна находится на панели задач, создайте неиспользуемое окно с
WS_EX_APPWINDOW
расширенный стиль. Чтобы кнопка окна не помещалась на панель задач, создайте неиспользуемое окно сWS_EX_TOOLWINDOW
расширенный стиль. В качестве альтернативы вы можете создать скрытое окно и сделать это скрытое окно владельцем вашего видимого окна.
Раймонд Чен суммировал эти правила более точно Вот. Цитирую его:
Есть несколько основных правил, по которым окна переходят в панель задач. Короче:
- Если
WS_EX_APPWINDOW
расширенный стиль установлен, затем он будет отображаться (когда он виден).- Если это окно верхнего уровня, то оно будет отображаться (когда оно будет видно).
- В противном случае это не показывает.
(Хотя ITaskbarList интерфейс немного запутывает.)
Вы мутили это раньше, звонили ITaskbarList::DeleteTab
, Это не обязательно. Чтобы убедиться, что окно не появляется на панели задач, просто примените обратное к правилам, регулирующим, когда окно делает появляются в панели задач.
Если у вас есть неиспользуемое окно верхнего уровня, оно будет отображаться на панели задач, если вы не Удалить WS_EX_APPWINDOW
расширенный стиль окна. Если у вас есть собственное окно, оно будет не будет отображаться на панели задач, если WS_EX_APPWINDOW
расширенный стиль окна установлен, чтобы заставить его там.
Так что если у вас есть WS_EX_APPWINDOW
расширенный стиль окна установлен, вы должны удалить его. Это заставляет окно отображаться на панели задач.
В противном случае, вы должны установить владельца для вашего окна. Например, сделайте так, чтобы второе окно принадлежало первому.
TL; DR:
WS_EX_APPWINDOW
а также WS_EX_TOOLWINDOW
из расширенного стиля.Пример:
Удаление флагов из расширенного стиля:
SetWindowLong(myHWND, GWL_EXSTYLE,
GetWindowLong(myHWND, GWL_EXSTYLE) & ~WS_EX_APPWINDOW & ~WS_EX_TOOLWINDOW);
Установка владельца:
SetWindowLongPtr(myHWND, GWLP_HWNDPARENT, myOwnerHWND);
Полное объяснение:
Несмотря на Ответ Коди будучи великим, он не совсем отвечает на точный вопрос.
Точный вопрос: «Как отобразить окно, которое не появляется на панели задач, пока появляется только на одном виртуальном рабочем столе?
Как объяснил Коди, есть несколько способов удалить кнопку панели задач для окна. Однако есть только один Кстати, он позволяет отображать только один виртуальный рабочий стол одновременно.
Если вы включите флаг WS_EX_APPWINDOW
в вашем расширенном стиле, это заставит окно показывать на панели задач. Вот почему это должно быть очищено в этом случае.
Если вы включите флаг WS_EX_TOOLWINDOW
в вашем расширенном стиле, это заставит окно не показать в панели задач, но заставит окно показываться на всех виртуальных рабочих столах. Таким образом, это не вариант здесь.
Наконец, если ваше окно не имеет ни одного флага, оно будет отображаться на панели задач, если и только если у него нет владельца. В любом случае, это будет не заставить себя на всех виртуальных рабочих столах. Следовательно, решение состоит в том, чтобы не иметь ни флагов, но установить владельца.