Обнаружение показать/скрыть представление задач (Win+Tab)

Я разрабатываю Application Desktop Панель инструментов (следующая панель инструментов). Панель инструментов получает ABN_FULLSCREENAPP уведомление при открытии или закрытии полноэкранного окна приложения (например, через F11). Окно является полноэкранным, когда его клиентская область занимает весь экран. Панель инструментов должна выходить из самого верхнего z-порядка, чтобы они не закрывали полноэкранное окно. Для этого я использую SetWindowPos() с флагом HWND_BOTTOM/HWND_TOPMOST.

Проблема: в Windows 10, когда открывается полноэкранное окно приложения (например, окно проводника через F11), панель инструментов получает ABN_FULLSCREENAPP и отправляется в нижний z-порядок. Затем при нажатии Win + Tab появляется представление задач. Представление задач занимает всю рабочую область экрана — весь экран исключает область панели задач и область панели инструментов. Но панель инструментов остается под полноэкранным окном, а такбар появляется сверху, см. изображение ниже. Я хочу, чтобы панель инструментов также находилась поверх полноэкранного окна, когда TaskVew открыт.

Во время открытия представления задач панель инструментов не получает никаких сообщений. Очевидно, поскольку Microsoft приостановила разработку ADT API, для панелей инструментов нет специального сообщения.

Возможные решения:
1) Используйте решение из похожего вопроса выполнив функцию в таймере между открытием и закрытием полноэкранного окна;
2) Использовать LowLevelKeyboardProc() с SetWindowsHookEx().

Оба решения не элегантны. Если вы знаете другой метод обнаружения открытия/закрытия TaskView, пожалуйста, сообщите. Недокументированные методы также полезны.

Поведение представления задач Windows 10


person Asaq    schedule 17.10.2017    source источник
comment
Полноэкранное окно по-прежнему открыто, пока виден TaskView. TaskView просто поверх него. Итак, почему вы ожидаете, что ваша панель инструментов будет уведомлена? TaskView явно учитывает вашу панель инструментов при заполнении рабочей области. Полноэкранное окно просто закрывает панель инструментов, как и должно быть. Итак, что вы ожидаете от своей панели инструментов, когда TaskView становится видимым, когда полноэкранное окно открыто? Вы хотите, чтобы панель инструментов перемещалась поверх полноэкранного окна? Вы можете просто вызвать другое решение isTaskViewOpen() по таймеру, пока открыто полноэкранное окно.   -  person Remy Lebeau    schedule 18.10.2017
comment
Спасибо. Добавил детали в вопрос. Да, я хочу, чтобы панель инструментов перемещалась поверх полноэкранного окна, когда открыто TaskView, и наоборот.   -  person Asaq    schedule 19.10.2017