Мистика с позиционированием главного окна
От: Евгений Музыченко Франция 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.