[00:21:37] <geniepro> чо было с жабером?
[13:41:40] <valexey> она утонула
[17:09:49] <geniepro> Влад! С днюхой!
[17:33:04] <valexey> vlad2++
[17:33:57] <valexey> Кстати, гайс, кто-нибудь мутил с функцией SetWindowPos? Чото оно не хочет менять у меня z-order окна.
[17:34:59] <TRUE> в пределах приложения или всей винды?
[17:35:04] <valexey> всей винды
[17:35:23] <valexey> у меня аппликуха которая раставляет окошки в нужном юзеру порядке
[17:35:27] <valexey> и вот это - не работает.
[17:35:38] <valexey> то есть менять положение получается, z-ордер -- нет
[17:35:54] <valexey> могу только сделать его topmost, но это уже вредительством будет :-)
[17:37:32] <valexey> да, если HWND_TOPMOST, то работает как надо в принципе. только не как надо :-/
[17:38:41] <TRUE> на всякий случай, если не видел:
https://stackoverflow.com/questions/1044315/setwindowpos-function-not-moving-window
[17:40:34] <valexey> дык оно у меня мувает окна и ресайзит как надо. а вот z-ордер не меняет
[17:41:50] <valexey> кажись я костыль придумал :-) вначале меняю им z-ордер через HWND_TOPMOST, а потом прохожусь еще раз и выставляю им флаг HWND_NOTOPMOST, чтобы они всегда на вернху не болтались.
[17:41:57] <valexey> так победим! уиндофс!
[17:42:39] <TRUE> а ты все окна сортируешь или только их подмножество?
[17:42:57] <valexey> подмножество. но если оно вылезет в топ - ничего страшного
[17:43:01] <TRUE> и что, если у каких-то окон по их природе был топмост?
[17:43:20] <valexey> то это проблемы юзера. в данном случае задача узкая - таких окон не будет
[17:43:38] <valexey> кстати, самое смешное, что окна муваются и сайзятся у меня, насмотря на SWP_SHOWWINDOW
[17:45:31] <TRUE> SWP_ASYNCWINDOWPOS может помешать правильной сортировке?
[17:49:11] <valexey> понятия не имею, я не выставил этот флаг
[17:49:22] <valexey> из всех флагов только SWP_SHOWWINDOW
[17:49:43] <TRUE> так присутствие/отсутствие SWP_SHOWWINDOW помогает?
[17:49:44] <valexey> если его убрать - ничего не меняется
[17:49:55] <valexey> не. не влияет :-)
[17:50:07] <valexey> а должно мешать.
[17:50:11] <TRUE> а сколько окон?
[17:50:59] <TRUE> а если SetWindowPos вызвать два раза: один раз без SWP_SHOWWINDOW, а второй раз - с ним
[17:52:36] <valexey> штук 6
[17:52:42] <TRUE> вообще не понятно, что делает этот флаг. Разворачиает окно, если оно было свёрнуто? Перерисовывает его? Просто делает видимым?
[17:53:12] <valexey> да этот флаг тут вообще никак не роляет.
[17:53:21] <valexey> роляет флаг HWND_TOPMOST
[17:53:29] <valexey> только он у меня z-ордер менять может
[17:53:38] <valexey> вне зависимости от всего остального
[17:53:58] <valexey> так что я вначале делаю HWND_TOPMOST а потом, сразу, HWND_NOTOPMOST
[17:54:06] <valexey> прям для этого же окна
[17:54:12] <TRUE> то несть, дважды вызвать функцию без флага и с флагом для одного окна не помогает?
[17:54:17] <valexey> это афигеть как криво, но работает теперь
[17:55:32] <valexey> Вот так работает ок:

SetWindowPos(hwnd, HWND_TOPMOST, x, y, x1, y1, SWP_SHOWWINDOW)
SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE)
[17:55:44] <valexey> SWP_SHOWWINDOW -- можно убрать. ничего не изменится в поведении
[17:57:04] <vlad2> Спасибо за поздравления! :)
[17:57:29] <TRUE> тоже хотел написать про SWP_NOMOVE|SWP_NOSIZE
[17:57:56] <vlad2> По поводу окон я помню только, что там целая проблема активировать свой апп из бэкграунда и показать что-то.
[17:58:00] <TRUE> и я тоже поздравляю
[17:58:31] <valexey> да тут свой апп вообще сонсольный :-) ему окна нинужны
[17:58:40] <valexey> win32 api - ужас и кошмар
[17:58:43] <valexey> кошмар и ужас
[17:58:44] <valexey> брр
[17:59:09] <vlad2> win32 теплый ламповый и няшный!
[17:59:15] <TRUE> это не win api, а реализация
[17:59:23] <TRUE> но win api тоже брр
[17:59:39] <valexey> у меня тут минимум две рализации -- оно везде так :-)
[17:59:54] <valexey> vlad2: ну, всё что не связано с окошками -- возможно :-)
[18:00:19] <vlad2> У тебя там нет какого-нибудь фрэймворка очень умного?
[18:00:55] <vlad2> Который знает как правильно активировать окна и поэтому не дает это делать тебе?
[18:01:48] <vlad2> Вообще конечно работать с окошками из консоли... звучит провокационно...
[18:02:27] <Kemet> valexey, setwindowpos не работает правильно с произвольными окнами же
[18:03:14] <vlad2> А, если
[18:03:27] <vlad2> если это не твои окна - то тем более.
[18:03:41] <vlad2> Возможно надо на хуки смотреть (в виде dll).
[18:04:23] <Kemet> Она тока с дочерними, выскакивающими и топвин
[18:06:56] <geniepro> https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowpos
HWND_NOTOPMOST Places the window above all non-topmost windows (that is, behind all topmost windows). This flag has no effect if the window is already a non-topmost window.
HWND_TOPMOST Places the window above all non-topmost windows. The window maintains its topmost position even when it is deactivated.
чота я не понял, в чём разница-то?
[18:07:28] <valexey> vlad2: не, я напрямую win32 api дергаю
[18:07:35] <valexey> даже хедера не подключаю :-)
[18:08:08] <valexey> Kemet: ну это ж неправда. setwindowpos у окон успешно меняет размеры и позицию
[18:08:23] <valexey> вот с z-ордером проблемы. и я их решил через вот такой костыль:
[18:08:28] <valexey> SetWindowPos(hwnd, HWND_TOPMOST, x, y, x1, y1, SWP_SHOWWINDOW)
SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE)
[18:08:28] <geniepro> Kemet: Changes the size, position, and Z order of a child, pop-up, or top-level window.
[18:08:50] <Kemet> valexey, z ордер ге меняет, так же в доке написанл
[18:09:13] <valexey> тогда зачем в этой функции второй аргумент?
[18:09:15] <Kemet> geniepro, я про это и сказал
[18:09:28] <valexey> я ж говорю -- получилось поменять z-ордер. см. выше как.
[18:09:51] <Kemet> valexey, что бы свои окна упорядочивать, и есть доступ к чужим если оно сверху или всплывающее
[18:10:00] <geniepro> valexey: а у тебя окна дочерние, выскакивающие или топ-левел?
[18:10:35] <Kemet> valexey, так ты его сделал топвин)) а в доке и написано, что верхнее можно
[18:11:38] <valexey> Kemet: после того, как я его сделал топвин, я его атрибуты уже не трогаю :-)
[18:11:46] <valexey> просто снимаю с него этот флаг и всё.
[18:12:35] <valexey> всё основное - делает первый вызов функции - меняет позицию и z-ордер. то есть не у топового окна.
[18:12:49] <valexey> после вызова - окно топовое. потом топовость с него убираем, чтобы не мешалось.
[18:14:44] <geniepro> valexey: ну а как ты хотел по другому менять z-order?
[18:15:06] <geniepro> окна ты сам запускаешь? или их кто-то раньше уже запустил?
[18:15:32] <valexey> что значит запускаю?
[18:15:39] <valexey> как окно можно запустить? :-)
[18:15:48] <valexey> экспериментирую на окошках проводника и блокнота
[18:16:00] <geniepro> ну как как? запустил прогу -- она окно открыла
[18:16:53] <valexey> geniepro: я хотел менять так, как это указано в документации - выставляя выше кого это окно должно стать.
[18:16:55] <geniepro> если окон нет -- открывай их в нужном порядке, или переупорядочивай -- вот так как ты сделал
[18:17:09] <valexey> дык ЕСТЬ окна.
[18:17:13] <valexey> еттить колотить
[18:17:18] <valexey> но я их не открывал
[18:17:20] <valexey> :-)
[18:17:34] <geniepro> ну так и рули их зедордером, делая их то верхними, то неверхними
[18:17:46] <valexey> переупорядочивать хотел не делая их "поверх всех окон включая таскманагер"
[18:21:45] <geniepro> Posted July 9, 2007
Did you try to use the HWND in the second SetWindowPos parameter?

Something like this:

SetWindowPos( bg, HWND_NOTOPMOST, x, y, w, h, 0 );
SetWindowPos( vid, bg, x, y, w, h, 0 );
[18:23:44] <geniepro> http://winapi.freetechsecrets.com/win32/WIN32DeferWindowPos.htm
[18:29:54] <Kemet> http://www.firststeps.ru/mfc/winapi/win/r.php?96
[18:31:42] <Kemet> Там внизу все опросано
[18:35:03] <valexey> "Если установлены флажки SWP_SHOWWINDOW или SWP_HIDEWINDOW, окно не может быть перемещено или изменен его размер." -- это ложь!
[18:35:42] <valexey> окно в этом случае прекрасно меняет и размер и положение.
[18:49:26] <geniepro> valexey: это у тебя глючит венда )))
[18:49:47] <geniepro> valexey: а может ты ваще в линухе через wine делаешь?
[19:01:21] <valexey> я это делаю везде. в основном - в винде. под вайном - то же самое поведение
[19:14:41] <valexey> SetWindowPos если окно чужое, банально делает SendMessageW со всеми структурками. И блочится пока тред владеющий целевым окном не обработает сообщение.
[20:06:29] <valexey> https://strelkamag.com/ru/news/v-skolkovo-zapustili-prototip-letayushego-taksi-bartini-on-upal-v-sugrob