Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Сделать несворачивающееся окно (по Win+D) [not topmost]

#winapi

                    
Чисто WinAPI, язык не принципиален.

Ситуация такая: делаю окно, оно НЕ topmost, и оно должно оставаться на экране при
нажатии Win+M и Win+D. Сейчас проверяю на Win7, но должно работать для любой.
Win+M вроде победил, а вот со вторым... Не могу понять, как вообще работает Win+D
- окну не приходят сообщения, которые я логически ожидал при сворачивании/перемещении.
А если как-то и получается заметить что свернули - не выходит запретить сворачивание.
Есть стандартная программа, которая имеет нужное поведение, но Spy++ вообще не может
ничего в ней отловить, даже под админом (первый раз такое увидел).

Проблема, что при нажатии Win+D окна пропадают (сворачиваются). А не должны. Кто-то
сталкивался с вопросом?

P.S. Возможно следует использовать какие-то новые интерфейсы оболочки Shell или DWM,
но никак не найду какие. :(
    


Ответы

Ответ 1



Надо изменить родительское окно, чтобы оно принадлежало Рабочему столу. Также может понадобиться предварительно отключить его отображение на панели задач. SetWindowLongPtr Me.hWnd, GWLP_HWNDPARENT, &H800F0 Где &H800F0 - это хэндл рабочего стола. Обращаю внимание, что вариант SetParent Me.hWnd, &H800F0 не годится, поскольку он делает окно частью рабочего стола, и любые (даже неактивные) окна будут отображаться поверх него. PS: Проверял на VB6, пришлось ещё в дизайнере формы выставить ShowInTaskbar = False, в противном случае окно сворачивается. Хендл рабочего стола узнал при помощи Spy++.

Комментариев нет:

Отправить комментарий