Не получается добится нужного Z порядка окна в windows

Текущая задача такая. Установить окно приложения всегда выше любых других окон, кроме окна "ms-screenclip:".

Помимо стилей Win32, я использую winapi SetWindowPos.

SetWindowPos(_handleWindow, HWND_TOP, Convert.ToInt32(currentPointCursor.X - OFFSET_CURSOR),
Convert.ToInt32(currentPointCursor.Y - OFFSET_CURSOR),IGNORE_SIZE_WINDOW, 
IGNORE_SIZE_WINDOW, NOT_MESSAGE_WM_WINDOWPOSCHANGING | SWP_NOSIZE);

Этого всё еще недостаточно чтобы окно было поверх других окон. Поэтому в манифесте указываю uiAccess = true. Это работает, до тех пор, пока не переходишь к второй части задачи.

SetWindowPos(_handleWindow, HWND_NOTOPMOST, Convert.ToInt32(currentPointCursor.X - OFFSET_CURSOR), Convert.ToInt32(currentPointCursor.Y - OFFSET_CURSOR),
IGNORE_SIZE_WINDOW, IGNORE_SIZE_WINDOW,  SWP_NOSIZE | SWP_NOMOVE);

Без uiAccess = true не получается добиться, чтобы некоторый окна не перекрывали моё окно. Тут возникает основная проблема с включенным uiAccess = true.SetWindowPos(_handleWindow, HWND_NOTOPMOST...) Он логически делает, то что мне нужно выводит ms-screenclip: на передний план, но после этого вся Z очередь окон ломается, т.е. не разворачивается свёрнутая панель задач windows, окна что, с панели задач что с ALT + TAB могут не показываться, пока некоторые другие окна не будут свёрнуты, и т.п., пока не выйдешь из приложения.

Опытным путём установлено, что при uiAccess = true любое изменение второго аргумента из SetWindowPos в любую сторону ломает нормальное поведение windows.

Я пытался помимо констант второго аргумента, использовать дескриптор окна "ms-screenclip:", что по идее должно его поместить под целевое окно, но это не работает в любую из сторон.


Ответы (0 шт):