Не получается добится нужного 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:", что по идее должно его поместить под целевое окно, но это не работает в любую из сторон.