Мистика с позиционированием главного окна
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 06.12.19 16:22
Оценка:
У меня для упрощения тестирования софта в разных системах сделан набор командных файлов, которые, вызывая друг друга, устанавливают различные параметры, формируют пути, зависящие от системы, запускают приложения и т.п. И вот еще несколько лет назад, когда начинал тестировать под десяткой, заметил, что, при запуске одного из моих оконных приложений из FAR через один из таких командных файлов, главное окно приложения отображается не поверх окна FAR, а под ним. В семерках-восьмерках такого нет — только в десятках. Списал это на какие-то новые особенности десятки, исследовать было лень.

В том тестовом наборе из командного файла запускалось только это приложение, а остальные лежали по известным путям, я всегда запускал их по имени из командной строки FAR. Сегодня, интереса ради, попробовал поменять приложение в командном файле — другие запускаются нормально (окна отображаются поверх текущего окна FAR). Стало интересно, начал экспериментировать.

Довольно быстро обнаружил, что эффект проявляется только в том случае, когда командный файл запускает приложение через start. Кроме этого — вызывает другие командные файлы, а те, в свою очередь, делают определенные операции — например, дважды вызывают одни и те же консольные команды, внешние по отношению к cmd.exe (пробовал три разных). Комментарю любой из вызовов — эффект пропадает, убираю комментарий — возвращается, комментарю другой — снова пропадает.

Версий FAR за это время сменилось множество, от 2.xx до 3.xx. Версий десятки — штук шесть.

Но самое удивительно даже не это, а то, что эффект наблюдается только на одном приложении — остальные отображаются нормально. Вставил в отладочный вывод параметры STARTUPINFO — никакие флаги не установлены. Приложение отображает главное окно (диалог) вызовом ShowWindow с SW_SHOWDEFAULT.

Есть какие-нибудь идеи о том, как такое вообще возможно?
showwindow startupinfo far окно z-order
Re: Мистика с позиционированием главного окна
От: ononim  
Дата: 06.12.19 17:19
Оценка:
У винды есть магия — возможность приложения назначать фореграунд окна, она немного описана тут: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-allowsetforegroundwindow но как любая магия имеет фундаментальные свойства изменчивости и глючности
Консольное окно тут предпосылка к проблемам, т.к. консольное окно де-факто принадлежит не к тому процессу, который чтото там запускает. А переписывать консольное окно микрософту в последнее время нравится.
Как много веселых ребят, и все делают велосипед...
Отредактировано 06.12.2019 17:37 ononim . Предыдущая версия .
Re[2]: Мистика с позиционированием главного окна
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 06.12.19 17:36
Оценка:
Здравствуйте, ononim, Вы писали:

O>у винды есть магия — возможность приложения назначать фореграунд окна


Так тое приложение никакой магией не пользуется. А если ею пользуется тот же FAR, то это вряд ли должно проявляться только на определенном и простом (в плане поведения окон) приложении. И зависимость от поведения командных файлов очень странна. Ну и магия эта существует с Win2k, а эффект возник только на десятках.
Re[3]: Мистика с позиционированием главного окна
От: ononim  
Дата: 06.12.19 17:38
Оценка:
O>>у винды есть магия — возможность приложения назначать фореграунд окна
ЕМ>Так тое приложение никакой магией не пользуется. А если ею пользуется тот же FAR, то это вряд ли должно проявляться только на определенном и простом (в плане поведения окон) приложении. И зависимость от поведения командных файлов очень странна. Ну и магия эта существует с Win2k, а эффект возник только на десятках.

Я там дополнил месагу. фар — консольное приложение. На моей памяти работа консоли в винде менялась коренным образом раза три. И это только пока я с винды не свинтил.
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.